目前我的程序位于一个地方,它既可以监听用户滚动某个元素,也可以自动滚动这个元素. (不是一个渐进的,漂亮的卷轴,而是瞬间跳跃.我发誓在上下文中有道理.)
如果通过设置scrollLeft或scrollTop完成滚动,有没有办法使滚动事件不触发?我的第一个想法是一个基本的开关,如:
ignoreScrollEvents = true;
element.scrollLeft = x;
ignoreScrollEvents = false;
function onScroll() {
if(ignoreScrollEvents) return false;
}
但由于事件不会立即触发(oops,duhh),这不是一个可行的解决方案.我可以尝试其他什么样的答案?我也在使用jQuery,如果这有帮助的话.
解决方法:
最简单的通用方法?只需在事件处理程序中重置标志即可.如果您实际上正在更改值,您将首先检查,否则将不会触发事件 – 因为Rodrigo notes,这里的一个好习惯是将其分解为所谓的“setter”函数:
function setScrollLeft(x)
{
if ( element.scrollLeft != x )
{
ignoreScrollEvents = true;
element.scrollLeft = x;
}
}
...
function onScroll()
{
var ignore = ignoreScrollEvents;
ignoreScrollEvents = false;
if (ignore) return false;
...
}
但是,根据您的需要,您可能已经将滚动位置存储在某处;如果是这样,只需更新并检查它作为您的标志.就像是:
element.scrollLeft = currentScrollLeft = x;
...
function onScroll()
{
// retrieve element, etc...
if (element.scrollLeft == currentScrollLeft) return false;
...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。