众所周知,使用鼠标滚轮,点击滚动条箭头或使用scroll
功能动态启动window.scrollTo(left, top)
事件。
是否可以确定导致scroll
事件发生的原因?无论是用户干预还是JS代码?
答案 0 :(得分:5)
我认为你无法确定导致滚动的原因。滚动事件仅表示窗口正在滚动,而不是为什么滚动。
但也许您在从代码中调用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
}
}
它不漂亮,但它应该工作