Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jqueryscroll多次调用函数_Jquery_Scroll_Window - Fatal编程技术网

jqueryscroll多次调用函数

jqueryscroll多次调用函数,jquery,scroll,window,Jquery,Scroll,Window,我有一个jquery滚动功能,如下所示: $(window).scroll(function() { if (($(window).scrollTop() + $(window).height()) >= ($('body').height() * 0.7)) { alert('call me'); } }); 以及HTML: <div style="height:450px;">BOX</div> 框 当我滚动时,我得到的不是一次呼

我有一个jquery滚动功能,如下所示:

$(window).scroll(function() {
if (($(window).scrollTop() + $(window).height()) >= ($('body').height() * 0.7)) {
        alert('call me');
     }
});
以及HTML:

<div style="height:450px;">BOX</div>
当我滚动时,我得到的不是一次
呼叫我
而是多次
呼叫我
。为什么会这样?出了什么问题?

可能还有其他方法可以做到这一点,但您可以在调用CSS类后设置它,然后在尝试再次调用它之前检查该类是否存在。。。大概是这样的:

function callfunction() 
{
    if (($(window).scrollTop() + $(window).height()) >= ($('body').height() * 0.7)) {
    $('body').addClass('called');
    alert('call me');
    }
}

$(document).scroll(function () { 
    if(!$('body').hasClass('called')) 
    {
        callfunction();
    }
}

可能还有其他方法可以做到这一点,但您可以在调用CSS类后设置它,然后在尝试再次调用它之前检查该类是否存在。。。大概是这样的:

function callfunction() 
{
    if (($(window).scrollTop() + $(window).height()) >= ($('body').height() * 0.7)) {
    $('body').addClass('called');
    alert('call me');
    }
}

$(document).scroll(function () { 
    if(!$('body').hasClass('called')) 
    {
        callfunction();
    }
}

这是一个特性,不是一个bug,在每次滚动事件发生时接收它是正常的,每次滚动条中元素的位置改变时滚动事件都会启动

如果不需要,可以添加标志、类或超时来避免它

例如,对于超时,您可以这样做:

JS: 小提琴在这里:

这是一项功能,不是一个bug,每次滚动事件发生时都会收到它是正常的,每次滚动条中某个元素的位置发生变化时都会启动滚动事件

如果不需要,可以添加标志、类或超时来避免它

例如,对于超时,您可以这样做:

JS: 小提琴在这里:
计时器不好,它会产生大量编程开销。。。添加类也会使代码变慢。您正在绑定一个函数,并在用户每次滚动时检查一个参数。那是对资源的巨大浪费

如果要在用户上调用函数一次,请在第一次调用时滚动解除绑定该函数:

function callfunction(){
   $(window).unbind("scroll");
   //*... do the rest of your programming here
}

计时器不好,它会产生大量的编程开销。。。添加类也会使代码变慢。您正在绑定一个函数,并在用户每次滚动时检查一个参数。那是对资源的巨大浪费

如果要在用户上调用函数一次,请在第一次调用时滚动解除绑定该函数:

function callfunction(){
   $(window).unbind("scroll");
   //*... do the rest of your programming here
}
Stackoverflow上有一个很好且干净的(er)解决方案

Stackoverflow上有一个很好且干净的(er)解决方案


我想知道为什么没有人投票支持这个,这似乎是正确和有效的方式。谢谢我想知道为什么没有人投票支持这个,这似乎是正确和有效的方式。谢谢简言之,这实际上是使用去BounceYes,这是一种谴责机制简言之,这实际上是使用去BounceYes,这是一种谴责机制