javascript - 将多个 EventListener 设置为元素但删除单个元素
问题描述
我有一个元素,在这个例子中 - $(window)。我想在这个元素上放置几个相同的 EventListener,这里“滚动”两次。这两个 EventListener 各自执行不同的功能,我不能/不想相互连接,这里以简化的方式显示。如何删除单个 EventListener?
这是我做的一个小例子。
// Logs 1 when scrolling
$(window).on("scroll", () => {
console.log(1);
});
// Logs 2 when scrolling
$(window).bind("scroll", () => {
console.log(2);
});
// After 2 seconds stop logging 1
setTimeout(() => {
$(window).unbind("scroll"); // remove only logging 1
}, 2000);
#test {
height:10000px;
width:100vw;
background:blue;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="test"></div>
解决方案
您可以使用event.namespace
它并为滚动事件添加多个命名空间,例如:
$(window).on("scroll.event1", () => {
console.log(1);
});
$(window).on("scroll.event2", () => {
console.log(2);
});
当您想删除事件 1 时,您可以简单地调用.off
它,如下所示:
setTimeout(() => {
$(window).off("scroll.event1"); // remove only logging 1
}, 2000);
演示:
$(window).on("scroll.event1", () => {
console.log(1);
});
$(window).on("scroll.event2", () => {
console.log(2);
});
// After 2 seconds stop logging 1
setTimeout(() => {
$(window).off("scroll.event1"); // remove only logging 1
}, 2000);
#test {
height: 10000px;
width: 100vw;
background: blue;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="test"></div>
推荐阅读
- android - 如何在 ExoPlayer 中显示图像?
- postgresql - 错误填充打印... net.sf.jasperreports.engine.fill.JRExpressionEvalException:错误评估表达式:
- javascript - 导航栏在桌面屏幕上悬停并在移动设备上单击时出现问题
- spring - 如何修复此 FirebaseApp 名称 [DEFAULT] 已存在!spring-boot 和 firebase
- java - Spring MVC 中的模型
- javascript - 永久夜间模式切换
- typo3 - 如何设置 TYPO3 RTE 向导的尺寸?
- angular - 我可以从 cmd 窗口“服务”驻留在 C:/SuperApp 中的我的应用程序吗 C:/OtherFolder>
- java - SpringBoot + RabbitMQ 抛出错误:java.net.ConnectException:连接被拒绝
- vb.net - 使用复选框防止焦点更改到 Datagridview 中的下一行