1

ユーザーがマウスをそのうちの1つに合わせるまで、同時に点滅させたい2つのdivがあります。

var shouldiblink = '1';

function mrBlinko(divid){
 while (shouldiblink =='1') {
 $("#"+divid).fadeIn(100).fadeOut(300);
}

$(document).ready(function(){
 mrBlinko("mydiv1");
 mrBlinko("mydiv2");
}

shouldiblink を '0' に設定するホバー イベントがあります。問題は、ページの準備が整うとすぐにループが開始され、ブラウザーがクラッシュすることです。

私はこの解決策に行き詰まっており、今のところ代替案が思いつきません。

手伝って頂けますか?

どうもありがとうございました。

4

4 に答える 4

4

setIntervalとclearIntervalを使用するのがより良い方法だと思います。

ページが読み込まれたら、setIntervalを使用して効果を発揮させます。ユーザーが要素の上にマウスを置くと、setIntervalで取得された間隔IDを使用して間隔をクリアします。

動作するデモを参照してください。

于 2010-03-15T10:24:02.563 に答える
2

選択肢の1つ-jQueryUIPulsateからの効果。

パフォーマンスを向上させるために、GoogleAPIからそれを含めます。


独自のソリューションを展開したい場合は、脈動効果のソースコードを確認すると便利な場合があります。

于 2010-03-15T10:23:38.087 に答える
1

<blink>私がタグを嫌ったのと同じくらい、これを試してみてください:

$.fn.blink = function(opts) {
   // allows $elem.blink('stop');
   if (opts == 'stop') {
     // sets 'blinkStop' on element to true, stops animations, 
     // and shows the element.  Return this for chaining.
     return this.data('blinkStop', true).stop(true, true).show();
   }

   // we aren't stopping, so lets set the blinkStop to false,
   this.data('blinkStop', false);

   // load up some default options, and allow overriding them:
   opts = $.extend({}, {
     fadeIn: 100,
     fadeOut: 300
   }, opts || {} );

   function doFadeOut($elem) {
     $elem = $elem || $(this); // so it can be called as a callback too
     if ($elem.data('blinkStop')) return;
     $elem.fadeOut(opts.fadeOut, doFadeIn);
   }
   function doFadeIn($elem) {
     $elem = $elem || $(this);
     if ($elem.data('blinkStop')) return;
     $elem.fadeIn(opts.fadeIn, doFadeOut);
   }
   doFadeOut(this);
   return this;
 };

 // example usage - blink all links until you mouseover:
 // takes advantage of the jQuery.one() function so that it only calls the 
 // stop blink once
 $('a').blink({fadeIn: 500, fadeOut: 1500}).one('mouseover', function() { 
   $(this).blink('stop') 
 });

 // 30 seconds after we started blinking, stop blinking every element we started:
 setTimeout(function() { 
   $('a').blink('stop');
 }, 30000);

 // example that should do what you wanted:
 $("#mydiv1,#mydiv2").blink().one('mouseover', function() {
   $(this).blink('stop');
 });
于 2010-03-15T10:32:43.643 に答える
1

jQuery の完了コールバックを使用した代替ソリューションを次に示します。

いつでも「selected-pulsate」を要素に追加して setPulsate() を呼び出すと、脈動が開始されます。現在のすべてのパルセータをクリアするには、clearSelection() を呼び出して、クラスを削除し、強制的に非表示にします。

clearSelection() [clearTimeout()] に行がありますが、これが必要かどうかはわかりません。私の非常に基本的なテストでは、その行がなくても機能しますが、その時点でタイマーがまだ実行されていて、問題が発生する可能性があるかどうかはわかりません.

また、fadeOut() 完了コールバック内で RepeatCall() を呼び出すとスタック オーバーフローが発生するかどうかも不明だったので、setTimeout を 10msec という小さな値で使用して、関数を直接呼び出す代わりに再度呼び出しました。

var currentPulsatorId = -1;

function clearSelection() {
    if (currentPulsatorId != -1) {
        clearTimeout(currentPulsatorId); /* needed? */
        currentPulsatorId = -1;
    }

    var curElems = $('.selected-pulsate');
    $(curElems).removeClass('selected-pulsate');
    $(curElems).hide();
}

function setSelection(elems) {
    $(elems).addClass('selected-pulsate');
    setPulsate();
}

function setPulsate() {
    // trigger
    RepeatCall();

    function RepeatCall()
    {
        $('.selected-pulsate').fadeIn(400, function() {
            $('.selected-pulsate').fadeOut(400, function() {
                // set timeout quickly again
                // call externally to avoid stack overflow
                currentPulsatorId = setTimeout(RepeatCall, 10);
            });
        });
    }
}
于 2013-03-05T01:00:12.650 に答える