Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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
只运行jQuery函数一次(而不是在事件发生时无休止地循环)_Jquery_Function_Scroll_Alert_Scrolltop - Fatal编程技术网

只运行jQuery函数一次(而不是在事件发生时无休止地循环)

只运行jQuery函数一次(而不是在事件发生时无休止地循环),jquery,function,scroll,alert,scrolltop,Jquery,Function,Scroll,Alert,Scrolltop,我有一个jQuery代码,当用户向下滚动到ad类高度(以及之后)时触发。问题是我希望它只运行一次并停止警报。非常简单的调整(并且没有settimeout,也没有设置变量;) css: html: 谢谢 给你: $(函数(){ var警报=错误; $(窗口)。滚动(函数(){ var-top=$('.ad').height(); if($(this).scrollTop()>=top&&!已发出警报){ 警惕=正确; 警报('标题刚刚通过'); } 否则如果($(this).scrollTop

我有一个jQuery代码,当用户向下滚动到ad类高度(以及之后)时触发。问题是我希望它只运行一次并停止警报。非常简单的调整(并且没有settimeout,也没有设置变量;)

css:

html:

谢谢

给你:

$(函数(){
var警报=错误;
$(窗口)。滚动(函数(){
var-top=$('.ad').height();
if($(this).scrollTop()>=top&&!已发出警报){
警惕=正确;
警报('标题刚刚通过');
} 

否则如果($(this).scrollTop()您应该使用
打开
关闭
如下所示:

$(window).on('scroll.foo', function(){
    // stop this once and for all!
    if( something == true )
       $(window).off('scroll.foo');
});
如上所示,绑定事件时必须使用作用域,以便以后可以取消绑定它们,而不会对可能绑定到同一对象(在本例中为窗口对象)的确切事件造成任何损坏


一旦满足某个条件,侦听器将不再存在,因此不会触发任何回调。

可能重复:无重复…不同的意思是上下滚动仍会收到其他警报…我认为有一种更干净的方法不需要使用外部变量:如果不需要额外的警报,请删除else块。有时,您必须使用一些额外的变量。当您收到第一个警报时,该函数仍在滚动。必须设法停止它
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
</head>
<body>
  <header>
    <div class='ad'></div>
  </header>
  <article></article>
</body>
</html>
$(function(){
  $(window).scroll(function(){
    var aTop = $('.ad').height();
    if($(this).scrollTop()>=aTop){
        alert('header just passed.');
    }
  });
});
$(function(){

var alerted = false; 

$(window).scroll(function(){
var aTop = $('.ad').height();

if($(this).scrollTop()>=aTop && !alerted){
    alerted = true;
    alert('header just passed.');
} 
else if($(this).scrollTop()<=aTop && alerted){
    alerted = false;
}
});
});
$(function(){
  var alerted = false; 

  $(window).scroll(function(){
    var aTop = $('.ad').height();

    if($(this).scrollTop()>=aTop && !alerted){
        alerted = true;
        alert('header just passed.');
    }
  });
});
$(window).on('scroll.foo', function(){
    // stop this once and for all!
    if( something == true )
       $(window).off('scroll.foo');
});