【发布时间】:2011-08-09 11:11:03
【问题描述】:
众所周知,scroll 事件可以通过使用鼠标滚轮、单击滚动条箭头或使用window.scrollTo(left, top) 函数动态触发。
是否可以确定导致scroll 事件触发的原因?是用户干预还是JS代码?
【问题讨论】:
标签: javascript javascript-events
众所周知,scroll 事件可以通过使用鼠标滚轮、单击滚动条箭头或使用window.scrollTo(left, top) 函数动态触发。
是否可以确定导致scroll 事件触发的原因?是用户干预还是JS代码?
【问题讨论】:
标签: javascript javascript-events
我认为您无法确定导致滚动的原因。滚动事件仅表明窗口正在滚动,而不是为什么它正在滚动。
但也许您在从您的代码调用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() 时间线函数,发现如果我在该函数中设置一个标志,它会与滚动监听器配合得很好。然后你只需重置标志。如果用户中断滚动,则不会设置标志,您可以终止动画...