我有一个 div 标签,在 css 中设置为“overflow:scroll”。
我有一个回调,应该在使用它找到的元素的滚动末尾调用。
$('#details').scroll( function () {
if ($(this).height() == ($(this).get(0).scrollHeight - $(this).scrollTop())) {
getDetails($("span:last").attr("id"), 3);
}
});
其中 getDetails 是我使用的回调。它获取 div 内范围的最后一个元素并将其作为值发送。都是ajax调用。问题是每次我将鼠标悬停到 div 末尾时 getDetails 都会被调用三次。关于如何让它被调用一次有什么建议吗?
仅当我使用滚轮或按滚动条按钮向下时才会发生重复回调。拖动滚动条时一切正常。
您应该推迟处理具有持续反馈的事件,例如滚动和调整大小事件,方法是使用setTimeout
/clearTimeout
。当引发您要处理的事件时,会在合理的持续时间内调用 setTimeout 中的预期处理程序,但保留对 setTimeout 返回句柄的引用。现在,修改相同的代码来检查该句柄是否存在,如果存在,clearTimeout
并将句柄更新为新的 setTimeout 调用。
这是一个工作示例:http://jsfiddle.net/SBgXA/ http://jsfiddle.net/SBgXA/
var timeoutHandle;
var handler = function(e) {
alert('raised'); // put your code here
if ($(this).height() == ($(this).get(0).scrollHeight - $(this).scrollTop()) {
getDetails($("span:last").attr("id"), 3);
}
}
$('#details').scroll(function(e) {
clearTimeout(timeoutHandle);
timeoutHandle = setTimeout(function() {
handler(e);
}, 100);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)