【发布时间】:2017-02-04 07:48:21
【问题描述】:
我有一个相当简单的函数来检测窗口滚动。当用户停止滚动时触发超时事件(500 毫秒)。然后监听器和超时结束。然后我将窗口动画(GSAP)到某个点。动画完成后,侦听器将再次启动。有时......再次检测到滚动,因此整个函数被触发两次。请查看控制台以查看此情况。
代码在这里:
var timeout;
var onScroll = function() {
console.log('scrolling...');
if(timeout) {
clearTimeout(timeout);
timeout = null;
}
timeout = setTimeout(function () {
console.log('done scrolling... stop listening...');
$(window).off( "scroll", onScroll);
clearTimeout(timeout);
timeout = null;
// aniamte scroll
console.log('start animating scroll...');
TweenMax.to($(window), 0.1, {scrollTo:{y:500}, onComplete:function(){
$(window).on( "scroll", onScroll);
console.log('done animating scroll. Start litening again.');
}});
}, 500);
}
$(window).on( "scroll", onScroll);
示例:http://codepen.io/rgbjoy/pen/RGVLBK?editors=0011
这是怎么回事?我应该问量子理论家吗?
【问题讨论】:
标签: javascript jquery gsap