2017-12-02 21 views
0

表示する画像を指定するdata-slidesプロパティを持つページの各divを通過する次のコードがあります。私が何をしたいかアニメーションを一時停止する

(function($) { 
'use strict'; 
$('[data-slides]').each(function(){ 
     var $slides = $(this); 
     var images = $slides.data('slides'); 
     var count = images.length; 
     var number = 0; 
     var slideshow = function() { 
      $slides 
       .css('background-image', 'url("' + images[number%count] + '")') 
       .show(0, function() { 
        setTimeout(slideshow, 3500); 
       }); 
       number++; 
     }; 

     slideshow(); 
    }); 
}(jQuery)); 

アニメーション固有の要素、そして再びそのスライドショーのアニメーションを開始し、その後、別のボタンを一時停止ボタンを持っている:それは、内外にそれらをフェージングにより、ループ内の異なる画像をアニメーション化します。どうやってやるの?ありがとう!フラッシュサンダーからの提案を使用して

EDIT

は、私が一時停止することができ、別のタイマーでそれを更新しました:これは動作します

function Timer(callback, delay) { 
    var timerId, start, remaining = delay; 

    this.pause = function() { 
     window.clearTimeout(timerId); 
     remaining -= new Date() - start; 
    }; 

    this.resume = function() { 
     start = new Date(); 
     window.clearTimeout(timerId); 
     timerId = window.setTimeout(callback, remaining); 
    }; 

    this.resume(); 
} 

function runSlideshow(div){ 
    var $slides = div; 
    var images = $slides.data('slides'); 
    var count = images.length; 
    var number = 0; 
    this.slideshow = function() { 
     $slides 
      .css('background-image', 'url("' + images[number%count] + '")') 
      .show(0, function() { 
       timer.resume(); 
      }); 
      number++; 
    }; 
    var timer = new Timer(this.slideshow, 3500); 

    this.slideshow(); 
} 

(function($) { 
    'use strict'; 
    $('[data-slides]').each(function() { 
      var run = new runSlideshow($(this)); 
      run.slideshow(); 
    }); 
}(jQuery)); 

、しかし、私のことができるようにする必要がありますそれを一時停止できるように$('[data-slides]')のいずれかからタイマーにアクセスしてください。どうやって?

+0

あなたのHTMLを追加することができます。あなたが望む修正を加えて実行例付きのスニペットを簡単に追加できます –

答えて

0
function Timer(callback, delay) { 
    var timerId, start, remaining = delay; 

    this.pause = function() { 
     window.clearTimeout(timerId); 
     remaining -= new Date() - start; 
    }; 

    this.resume = function() { 
     start = new Date(); 
     window.clearTimeout(timerId); 
     timerId = window.setTimeout(callback, remaining); 
    }; 

    this.resume(); 
} 

var timer = new Timer(function() { 
    alert("Done!"); 
}, 1000); 

timer.pause(); 
// Do some stuff... 
timer.resume(); 

クレジットはTim Downです。

+0

これを自分のコードに合わせることができると思いますか?私はネイティブのJS開発者ではないので、これがどのように関係しているのかよく分かりません。 – Tometoyou

+0

この関数をコードに追加し、 'setTimeout'の代わりに' timer'を 'setTimeout'の代わりに使用して、' timer.pause() 'と' timer.resume() 'を呼び出すことができます。例えば ​​'onclick'イベントのように。 –

+0

おかげで私はそれをやってしまった。ただし、別のonclickイベントからタイマーにアクセスするにはどうすればよいですか?私は要素上でforeachループを実行しているので、アクセスするのは難しいようです。私はコードを更新しました... – Tometoyou

関連する問題