javascript - 页面滚动末尾的 jQuery 回调

标签 javascript jquery html callback scroll

我有一个 div 标签,它被设置为溢出:在 css 中滚动。
我有一个回调,应该在使用它找到的元素滚动结束时调用。

$('#details').scroll( function () {  
    if ($(this).height() == ($(this).get(0).scrollHeight - $(this).scrollTop())) {  
        getDetails($("span:last").attr("id"), 3);  
    }  
});  

其中 getDetails 是我正在使用的回调。它获取 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);
       });

关于javascript - 页面滚动末尾的 jQuery 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9758527/

相关文章:

javascript - 从 Node.JS (JavaScript) 中删除 AWS/S3 对象

javascript - 如何在 Angularjs Controller 中的 Click 上更新我的 html

javascript - 如何通过单击取消选中默认选中的单选按钮

javascript - 当单击指定的 div 以外的其他内容时,然后隐藏下拉列表

javascript - 这个 JavaScript 可以优化吗?

javascript - 代码中出现意外的 token 错误

javascript - 如何在 Chrome、Firefox 和 IE 中捕获后退按钮事件

javascript - 拉拉维尔 5.8 : Why $request->hasFile returns false

javascript - 如何从多个URL中提取相同的元素并保存在文件中?

javascript - 仅使用 CSS 的响应式菜单不显示