jquery如何在单击另一个事件时禁用滚动事件
jquery how to disable an scroll event on click of another event
这是我用来显示弹出窗口的脚本,然后单击禁用它。当滚动超过某个限制时会显示弹出窗口,然后一直保持到单击关闭图像为止。
<script>
$(document).ready(function(){
$('#popupbackground').hide();
$('#popup').hide();
$('img#close').hide();
$(window).scroll(function(){
if($(document).scrollTop() > 325){
$('#popupbackground').fadeIn(750);
$('#popup').fadeIn(750);
$('img#close').fadeIn(750);
}
});
$("img#close").click(function(){
$("#popupbackground").hide();
$("#popup").hide();
$("img#close").hide();
});
});
</script>
这很好,但我现在遇到的问题是,当点击关闭img并且弹出窗口消失时,当用户再次滚动时,它会重新出现。
什么是一种简单而轻便的方法来禁用弹出窗口的重新出现?
如果在显示弹出窗口后不再需要跟踪滚动事件,则应该"解除绑定"处理程序。例如:
$(document).ready(function(){
$('#popupbackground').hide();
$('#popup').hide();
$('img#close').hide();
function handleWindowScroll() {
if($(document).scrollTop() > 325){
$(window).off('scroll', handleWindowScroll);
$('#popupbackground').fadeIn(750);
$('#popup').fadeIn(750);
$('img#close').fadeIn(750);
}
}
$(window).on('scroll', handleWindowScroll);
$("img#close").click(function(){
$("#popupbackground").hide();
$("#popup").hide();
$("img#close").hide();
});
});
注意object.on('click',handler)与jQuery中的object.click(handler)相同。
如果你仍然需要跟踪滚动事件,而解除绑定的解决方案不起作用,你可以使用一个变量:
$(document).ready(function(){
var popupShown = false;
$('#popupbackground').hide();
$('#popup').hide();
$('img#close').hide();
$(window).scroll(function(){
if(!popupShown && $(document).scrollTop() > 325){
popupShown = true;
$('#popupbackground').fadeIn(750);
$('#popup').fadeIn(750);
$('img#close').fadeIn(750);
}
});
$("img#close").click(function(){
$("#popupbackground").hide();
$("#popup").hide();
$("img#close").hide();
});
});
您可以通过多种方式实现这一点:
1) 设置一个变量以阻止弹出窗口触发
<script>
$(document).ready(function(){
$('#popupbackground').hide();
$('#popup').hide();
$('img#close').hide();
var hasClosed = false;
$(window).scroll(function(){
if($(document).scrollTop() > 325 && !hasClosed){
$('#popupbackground').fadeIn(750);
$('#popup').fadeIn(750);
$('img#close').fadeIn(750);
}
});
$("img#close").click(function(){
hasClosed = true;
$("#popupbackground").hide();
$("#popup").hide();
$("img#close").hide();
});
});
</script>
2) 在弹出窗口打开(首选)后删除滚动触发器
<script>
$(document).ready(function(){
$('#popupbackground').hide();
$('#popup').hide();
$('img#close').hide();
var openPopup = function(){
if($(document).scrollTop() > 325){
$('#popupbackground').fadeIn(750);
$('#popup').fadeIn(750);
$('img#close').fadeIn(750);
}
}
$(window).on('scroll', openPopup );
$("img#close").click(function(){
$(window).off('scroll', openPopup );
$("#popupbackground").hide();
$("#popup").hide();
$("img#close").hide();
});
});
</script>
第二种方法效果最好,因为它可以防止jQuery在发生一次后触发对scrollTop()的检查。其中作为第一个选项将继续检查,但由于false
布尔而不会激发
相关文章:
- 只覆盖箭头键滚动事件
- Javascript如何找到滚动事件的来源
- 谷歌地图劫持了iphone's滚动(触摸事件)-如何恢复
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- jquery/ajax无限滚动事件
- 如何检测滚动事件是否像在触摸设备上一样只触发一次
- 如何查明鼠标按下事件是否发生在滚动条上或元素中的其他任何位置
- 为什么不'我的窗口滚动事件根本没有启动.其他答案没有解决问题
- 在滚动时,在隐藏滚动条和隐藏溢出的同时触发事件
- 如何用javascript调用函数,然后在滚动事件中调用该函数的特定实例
- 将事件列表滚动到给定月份的第一个事件
- '滚动'事件未在CompositeView中激发
- 从父元素取消绑定滚动事件并绑定到子元素
- JavaScript/jQuery未触发滚动事件
- 如何使用javascript检测不可滚动元素中的滚动事件和方向
- Javascript鼠标滚轮事件滚动
- 点击未触发溢出事件:滚动
- 将jquery事件滚动与“;在“上”;
- actionscript 3-as3中的鼠标事件滚动flash和html.有没有办法停止使用javascript
- jquery和事件滚动