你能重写“onscroll”吗?使用另一个监听器
Can you override an "onscroll" listener by using another?
我正在处理一个问题,我想用一个专门分配给元素的全局onscroll事件侦听器覆盖。
下面是一个例子。
$("a").on('click', function(){
console.log('Clicked');
$('html,body').animate({scrollTop:50}, 1000);
var count = 0;
$(window).on('scroll', function(){
if(count < 5)
{
console.log('Scrolling via link...');
}
count++;
});
});
var globalCount = 0;
$(window).on('scroll', function(){
if(globalCount < 5)
{
console.log('Scrolling...');
}
globalCount++;
});
body{min-height:2000px;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#">Link</a>
我如何防止console.log('滚动…')从运行?
您可以试试event.stopPropagation()
$("a").on('click', function(){
console.log('Clicked');
$('html,body').animate({scrollTop:50}, 1000);
var count = 0;
$(window).on('scroll', function(event){
if(count < 5)
{
console.log('Scrolling via link...');
}
count++;
//stop propagation stops the bubbling of the event down to further event handlers.
event.stopPropagation();
});
});
var globalCount = 0;
$(window).on('scroll', function(){
if(globalCount < 5)
{
console.log('Scrolling...');
}
globalCount++;
});
body{min-height:2000px;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#">Link</a>
我真的不明白你到底想做什么…但是,你可以取消注册你在点击事件处理程序底部附加的滚动事件处理程序,就在你附加新事件处理程序之前,通过$(window).off('scroll')
$("a").on('click', function(){
console.log('Clicked');
$('html,body').animate({scrollTop:50}, 1000, attachGlobalListener);
var count = 0;
$(window).off('scroll'); //This removes the "global" event handler specified at the bottom of this snippet
$(window).on('scroll', function(){
if(count < 5)
{
console.log('Scrolling via link...');
}
count++;
});
});
function attachGlobalListener(){
var globalCount = 0;
$(window).on('scroll', function(event){
if(globalCount < 5)
{
console.log('Scrolling...');
}
globalCount++;
});
}
//attach the listener to begin with
attachGlobalListener();
body{min-height:2000px;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#">Link</a>
您可以使用一个标志来检查是否需要处理全局滚动事件。顺便说一句,动画完成后不要忘记取消嵌套滚动事件的绑定。下面是一个例子:
$("a").on('click', function() {
console.log('Clicked');
globalScroll = false;
$('html,body').animate({
scrollTop: 50
}, 1000, function() {
$(window).off('scroll.clicked');
globalScroll = true;
});
var count = 0;
$(window).on('scroll.clicked', function() {
if (count < 5) {
console.log('Scrolling via link...');
}
count++;
});
});
var globalCount = 0,
globalScroll = true;
$(window).on('scroll', function() {
if (!globalScroll) return;
if (globalCount < 5) {
console.log('Scrolling...');
}
globalCount++;
});
body {
min-height: 2000px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#">Link</a>
相关文章:
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 使用clickToggle并在单击另一个元素时关闭元素
- 使用javascript将动态表从一个html页面打印到另一个html页
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 从Rally获取一个特定的标记,以便计算另一个字段中的值
- 无法从jquery Mobile导航栏重定向到另一个页面
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 如何在鼠标悬停时在另一个图像上滑动图像.
- 导航到特定事件的另一个变量页面
- 正在传递JSONP标头's数据参数到另一个文件中的AJAX请求
- 如何在react js中将值从一个组件发送到另一个组件
- 按我自己的类克隆另一个元素的内容和顺序
- 在另一个函数中使用变量this
- 如何在react js中从一个页面导航到另一个页面
- javaScript-我们如何将一个事件监听器设置为另一个事件监听器的从属
- 你能重写“onscroll”吗?使用另一个监听器