2015-02-06 100 views
-1

是否有可能我们可以停止setInterval意味着下一个间隔只会在第一个事件完成时才会调用。停止setInterval直到操作未执行?

我只想装载下一张图片时才加载上一张图片。这个事件只有在鼠标悬停后才能使用。但是如果下一张图片的大小很大,那么下一个间隔是在我的情况下调用..我想要停止间隔直到最后图像未加载。

这是我的代码:

jQuery('.product').on('mouseover', function(){ 
    timer = setInterval(function() { 
     if (counter === product_images.length) { 
      counter = 0; 
     } 

     // selector.addClass('hidden'); 
     loading_image.removeClass('hidden'); 
     selector.attr('src', 'localhost/product/' + product_images[counter]); 
     var loadImage = new Image(); 
     loadImage.src = selector.attr('src'); 
     loadImage.onload = function() {console.log('after load'); 
     loading_image.addClass('hidden'); 
     // selector.removeClass('hidden'); 
     selector.show(); 
    }; 
    counter = counter + 1; 
}, 1000); 

我们怎样才能阻止的setInterval或阻止其进入下一个区间,即使任务上次间隔不completed.Not为clearInterval,应继续(setInterval的),如果第一任务完成。

请帮帮我。

+0

我想你正在寻找'clearInterval(timer);' – Imperative 2015-02-06 10:19:53

+0

不适用于clearInterval setInterval应该是继续的,但只停止该移动,直到第一个任务没有完成。 – SINGH 2015-02-06 10:21:31

+2

你需要使用回调和/或承诺那 – atmd 2015-02-06 10:23:39

回答

1

请尝试下面的代码。这可能工作,

var flag = 1; 
jQuery('.product').on('mouseover', function(){ 
    if(typeof timer != "undefined") 
     clearInterval(timer); 
    timer = setInterval(function() { 
     if(flag){ 
      if (counter === product_images.length) { 
       counter = 0; 
      } 
      loading_image.removeClass('hidden'); 
      selector.attr('src', 'localhost/product/' + product_images[counter]); 
      flag = 0; 
      var loadImage = new Image(); 
      loadImage.src = selector.attr('src'); 
      loadImage.onload = function() { 
       console.log('after load'); 
       loading_image.addClass('hidden'); 
       selector.show(); 
       flag = 1; 
      }; 
      counter = counter + 1; 
     } 
}, 1000); 

注:我没有测试过这个代码。

+0

@Boss你真的是一个老板...它为我工作.. @非常感谢... – SINGH 2015-02-06 10:36:21