2016-10-12 17 views
0

jqueryのプラグイン開発について少し学びたいと思っています。それは何基本的なスライダのイベント処理

  • それはマウスが入ったときの間隔がクリアされ、アニメーションが
  • を停止し、マウスが離れたときの間隔が

を再起動します。しかし

  • を右から左にスライドここに問題があります:

    私がいつも入力して、スライドの機能を壊した。読み込みアニメーションは意図どおりに続きます。

    私は、イベントハンドリングがmouseenterleaveで行われているとは思いません。この事柄を扱うボタンについて考えましたが、おそらく他の何か他の完全に間違った/愚かなことを考えました。 here:::)

    はこちらをご覧

  • 答えて

    0

    あなたは、(スタート)、再び

    私はあなたのfiddle

    の変更を更新init()前にタイムアウトと停止スライダーをクリアするのを忘れ:

    var interval, timeout; 
    
    function stopSlider() { 
        console.log("function: stopSlider");   
        clearTimeout(timeout); 
        clearInterval(interval);   
    } 
    
    $('.slides').on('mouseenter', function() { 
        stopSlider(); 
    }).on('mouseleave', function() { 
        stopSlider(); 
        timeout = setTimeout(init, pause); 
    }); 
    
    function startSlider() { 
        // just a tip 
        // $('.loading').animate({"width": "0"}, 0); // makes no sense, use instead .css() 
        $('.loading').css('width', '0'); 
        ... 
    } 
    
    +0

    うわー。これは多くの助けとなりました。私はそのclearTimeout関数とそれをいつ使用するかについて読む必要があります。これは、基本的にタイムアウトが解雇され、解雇され、解雇されないことを意味します。しかし、その行動は奇妙です。私は、タイムアウトがスタックされ、順次処理されていると仮定します。 – mayo83

    +0

    歓迎です:)正しく。時間切れが何度も繰り返された。基本的な問題は、新しい間隔(新しいprocress id '2')を開始する、すでに新しいタイムアウトを開始するマウス' mouseenter'で最初に行きました。これで、 'mouseleave'を起動し、最初の(初期化されたprocress id' 1')間隔だけをクリアしましたが、前に開始する間隔(3秒のタイムアウト)はクリアしませんでした。 – pleinx

    0

    代わりに間隔をクリアすると、あなたのアニメーションの停止と移動を制御するためのフラグを使用して試みることができます。クリアインターバルを使用してアニメーションを停止し、新しいインターバルを作成してアニメーションを再開することは、アニメーションを制御することではありません。以下のようなものは、あなたのケースに役立ち、別の方向であなたを助けるかもしれません。 :

    <div id='mySlider' style='width:200px;height:40px;background-color:blue;'></div> 
     
    <script> 
     
        var mySlider = document.getElementById('mySlider'); 
     
        var isOver = true; 
     
    
     
        mySlider.addEventListener('mouseenter' , function(){ 
     
        isOver = false; 
     
        }); 
     
        
     
        mySlider.addEventListener('mouseout' , function(){ 
     
        isOver = true; 
     
        }); 
     
    
     
        var myID = setInterval(function(){ 
     
        if(isOver === false) 
     
         mySlider.style.width = parseInt(mySlider.style.width) + 1 + "px"; 
     
        },10); 
     
    
     
    </script>

    関連する問題