滚动在javascript中不起作用

滚动在javascript中不起作用,javascript,jquery,html,ajax,dom,Javascript,Jquery,Html,Ajax,Dom,我有一个滚动功能 $('#lisr').scroll( function() { if($(this).scrollTop() + $(this).innerHeight()>= $(this)[0].scrollHeight) { //DO some code } } 问题是当我向下滚动,它到达底部时,它会执行代码两次而不是一次,因此如果我在其中进行任何ajax调用,它会执行两次,这是我缺少的?当用户滚动页面时,scroll()函数绑定到scr

我有一个滚动功能

$('#lisr').scroll( function() {
    if($(this).scrollTop() +  $(this).innerHeight()>= $(this)[0].scrollHeight)
    {
        //DO some code
    }
}
问题是当我向下滚动,它到达底部时,它会执行代码两次而不是一次,因此如果我在其中进行任何ajax调用,它会执行两次,这是我缺少的?

当用户滚动页面时,
scroll()
函数绑定到scroll事件,该事件会多次触发

$('#lisr').scroll( function() {
    if($(this).scrollTop() +  $(this).innerHeight() > $(this)[0].scrollHeight)
    {
        //DO some code
    }
}
编写代码时假设可以多次调用:

var completed = false;

function doSomeCode() {}
function isAtBottomOfPage() {}

$('#lisr').scroll(function () {
  if (!completed && isAtBottomOfPage()) {
    doSomeCode();
    completed = true;
  } 
});
jsfiddle:

更高级的注意事项是,您可能不应该将逻辑直接绑定到
scroll
事件;滚动时,可能会给用户造成延迟。请阅读John Resig提供的更多信息:


以下是我的无休止滚动代码。我要做的是解除滚动事件的绑定,直到ajax请求完成。您还可以使用变量作为标志,并在调用ajax请求之前检查/更改其值。希望有帮助:

$(document).ready(function(){
    $(window).bind('scroll', loadPage);
});


var loadPage = function(){
    if($(window).scrollTop() + $(window).height() == $(document).height()) {
        $(window).unbind('scroll');
        $.ajax({
           //Your things here
           success: function(result){
              // Do success here
              $(window).bind('scroll', loadPage);
           },
           error : function(xhr){ //Do error here }
        });
    }
}

使用
而不是
=
得到相同的结果???或者可能
==
。你能提供一个JSFIDLE吗?否则<代码>滚动< /COD>事件被多次触发,你应该考虑使用节流。@未定义的是什么?fb使用的是什么?@user1765876他的意思是对滚动处理程序使用一个超时来进行一点去抖动example@A.Wolff>不运行代码,on==与您在中所指的ResultsMaphores相同javascrip@Wheelys代码似乎同时运行。。因为信号量不是偶数helping@user1765876我可以肯定地告诉你,代码不会同时发生。查看我的JSFIDLE更新答案。如果不是文档高度,是否满足条件我不明白你的意思?文档高度不完全是我回答的重点。。。