2015-02-10 31 views
2

我有一些代碼應該滾動一個頁面高度每次滾動觸發某種方式。我希望這隻能滾動一個高度,並且「暫停」觸發器直到滾動完成。但是,我的腳本不會停下來,而是會立即滾動。滾動向上似乎更好地工作......滾動jQuery

這裏是我的腳本:

var lastScroll = 0; 
var scrollPos = 0; 
var blockScroll = 0; 

$(window).scroll(function() { 
    var scroll = $(this).scrollTop(); 
    if(blockScroll == 0) { 
     blockScroll = 1; 
     if(scroll > lastScroll){ 
      // Down 
      scrollPos++; 
      console.log(scrollPos+"-"+blockScroll); 
      $("html, body").animate({scrollTop:$(window).height()*scrollPos}, 'slow', function() { 
       blockScroll = 0; 
      }); 
     } else { 
      // Up 
      scrollPos--; 
      console.log(scrollPos); 
      $("html, body").animate({scrollTop:$(window).height()*scrollPos}, 'slow', function() { 
       blockScroll = 0; 
      }); 
     } 
    } 
    lastScroll = scroll; 
}); 

blockScroll是指當滾動事件似乎設置,並且滾動動畫停止時被取消設置。作爲鎖。我不是很舒服,雖然我想要這樣做,但是...有人可以看到明顯的錯誤嗎?我有麻煩的事實,即jQuery是異步?

+1

的vaiable'lastScroll'不被任何定義 – 2015-02-10 14:28:45

+0

我不小心刪除了,將它添加! – theva 2015-02-10 17:22:51

回答

1

看來,animate被燒成滾動事件本身,所以當它完成,它的發射,其重新啓動的過程中最後一個滾動事件。

好像回調增加一個小的超時解決了這個問題:

setTimeout(function() {blockScroll = 0;}, 50) 

http://jsfiddle.net/qch787yq/1/

+0

啊!這工作,謝謝! – theva 2015-02-10 22:14:21