页面滚动结束时的jQuery回调
jQuery Callback on end of page scroll
我有一个div标记,它被设置为溢出:在css中滚动
我有一个回调,它应该在使用它找到的元素的滚动结束时调用。
$('#details').scroll( function () {
if ($(this).height() == ($(this).get(0).scrollHeight - $(this).scrollTop())) {
getDetails($("span:last").attr("id"), 3);
}
});
其中getDetails是im使用的回调。它获取div中span的最后一个元素,并将其作为值发送。它的全部ajax调用。问题是每次我把鼠标悬停在div的末尾时,getDetails都会被调用三次。关于如何让它被调用一次,有什么建议吗?
只有当我使用滚轮或按下滚动条按钮向下时,才会发生重复回调。拖动滚动条时一切正常
您应该使用setTimeout
/clearTimeout
来延迟处理具有恒定反馈的事件,例如滚动和调整事件大小。当您想要处理的事件被引发时,在setTimeout中对您想要的处理程序的调用会以合理的持续时间返回,但会保留对处理程序setTimeout的引用。现在,修改相同的代码以检查该句柄的存在,如果存在,则clearTimeout
并将句柄更新为新的setTimeout调用。
以下是一个工作示例: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);
});
我没有对此进行测试,但沿着这些路线的某些东西可能会起作用。不过,这很烦人。。。
$('#details').data("didfire", false).scroll( function () {
if ($(this).height() == ($(this).get(0).scrollHeight - $(this).scrollTop())) {
if(!$(this).data("didfire")) {
getDetails($("span:last").attr("id"), 3);
$(this).data("didfire", true)
var ref = $(this);
setTimeout(function(){
ref.data("didfire", false);
}, 500);
}
}
});
相关文章:
- Mapbox,无法在jquery回调中设置GeoJSON
- Jquery回调函数执行多次
- lazyload jquery 回调函数
- 将其绑定在 backbone.js 中的 jQuery 回调中
- 如何获取 jQuery 回调触发返回值
- jQuery回调-严格违反
- 如何在表单提交后进行Jquery回调
- jQuery回调函数累积
- 将 this 应用于 jQuery 回调
- 创建一个 jQuery 回调函数
- 在 JavaScript / jQuery 回调中使用“this”更改单击元素的文本
- 使用 jQuery 回调参数通过 AJAX 调用 PHP 函数
- jquery回调没有响应
- jQuery回调函数在循环之前触发最后一行
- jQuery 回调在声明完成时不触发:
- JQuery 回调工作
- 带有参数的 JQuery 回调 - 新手
- JavaScript jquery回调累积
- 用作 Jquery 回调时匿名函数与命名函数的内存开销
- 如何知道jQuery回调函数中有哪些参数可用,如何理解它并添加参数