只运行jQuery函数一次(而不是在事件发生时无休止地循环)
我有一个jQuery代码,当用户向下滚动到ad类高度(以及之后)时触发。问题是我希望它只运行一次并停止警报。非常简单的调整(并且没有settimeout,也没有设置变量;) css: html: 谢谢 给你:只运行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
$(函数(){
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');
});