众所周知,scroll
事件可以通过使用鼠标滚轮、单击滚动条箭头或使用window.scrollTo(left, top)
函数动态触发。
是否可能确定是什么导致了scroll
事件的触发?是用户干预还是JS代码?
众所周知,scroll
事件可以通过使用鼠标滚轮、单击滚动条箭头或使用window.scrollTo(left, top)
函数动态触发。
是否可能确定是什么导致了scroll
事件的触发?是用户干预还是JS代码?
我认为你无法确定是什么导致了滚动。滚动事件只表示窗口正在滚动,而不是滚动的原因。
但或许在调用你的代码中的window.scrollTo()
之前,你可以暂停滚动事件监听器或设置一个标志。在Safari中,如果使用scrollTo()
,则无论你滚动多少次,滚动事件仅触发一次,因此你可以考虑这样做:
// somewhere in your code...
isCodedScrollEvent = true;
window.scrollTo(0, 200);
// elsewhere in your code...
function scrollListener(event) {
if( isCodedScrollEvent ) {
// event was caused by code, so handle it differently
// and then flip the flag back to false, so the next
// will be handled normally again
isCodedScrollEvent = false;
} else {
// event was caused by user
}
}
这不太美观,但应该可以工作
onUpdate()
时间轴函数,并发现如果在该函数中设置一个标志,它会与滚动监听器很好地同步。然后你只需重置该标志。如果用户中断滚动,则不会设置该标志,因此您可以终止动画... - newshorts