作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个相当简单的函数来检测窗口滚动。当用户停止滚动时触发超时事件 (500ms)。这结束然后听众和超时。然后我将窗口动画化(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
这是怎么回事?我应该问量子理论家吗?
最佳答案
看起来您的 onComplete 函数在 scrollTo 补间完成之前被调用。
我将 onScroll 中的控制台日志语句更改为:
console.log('scrolling to ' + window.pageYOffset );
然后我在日志中看到了这个:
"scrolling to 341"
"scrolling to 340"
"scrolling to 338"
"done scrolling... stop listening..."
"start animating scroll..."
"done animating scroll. Start litening again."
"scrolling to 500"
"done scrolling... stop listening..."
"start animating scroll..."
"done animating scroll. Start litening again."
所以“滚动到 500”似乎来自调用 onComplete 方法后的补间完成。
我不确定这个问题的解决方案是什么,因为它似乎是 TweenMax 中的一个错误。
关于javascript - 窗口莫名检测到滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39711783/
我是一名优秀的程序员,十分优秀!