$(document).ready(function() { $(document).mousedown(function(event){ if (event.target.className != 'pop') { $(".pop").hide() } }); $($(".imgt").hover).unbind(mouseenter).unbind(mouseleave); } )
时间: 2024-04-26 18:26:40 浏览: 150
这是一个使用 jQuery 的代码块,其中包含了两个事件处理函数。第一个事件处理函数绑定在文档对象上的 mousedown 事件上,当用户在文档上点击鼠标时,会检查被点击的元素是否具有 pop 类名,如果没有,则隐藏所有具有 pop 类名的元素。第二个事件处理函数解除了 .imgt 元素上的 mouseenter 和 mouseleave 事件的绑定。其中 .pop 和 .imgt 都是 HTML 元素的类名。
相关问题
document.addEventListener销毁监听
### 如何正确移除 `document` 上添加的事件监听器
为了确保能够成功移除通过 `addEventListener()` 方法添加的事件监听器,必须遵循特定的最佳实践。当使用 `addEventListener()` 给文档或其他 DOM 元素绑定事件处理器时,如果希望稍后能通过 `removeEventListener()` 来解除该绑定,则需要注意几个要点。
#### 使用命名函数而非匿名函数
定义一个具体的函数作为事件处理程序而不是使用内联匿名函数非常重要。这是因为 `removeEventListener()` 需要确切知道要移除的具体函数实例。对于匿名函数来说,在每次调用时都会创建新的函数对象,这使得它们无法被识别并移除[^5]。
```javascript
// 不推荐的方式 - 匿名函数不可移除
document.addEventListener('click', function(event){
console.log('Clicked');
});
// 推荐的方式 - 定义可重用的方法来作为回调
function handleClickEvent(event) {
console.log('Clicked');
}
document.addEventListener('click', handleClickEvent);
```
#### 处理上下文 (`this`) 的情况
有时会遇到需要调整事件处理程序内部 `this` 关键字指向的情况。此时可能会考虑使用 `.bind()` 方法改变 `this` 的值。然而这样做会影响后续尝试移除这些监听器的能力,因为每次调用 `.bind()` 实际上都返回了一个新函数[^2]。
```javascript
const obj = { message: 'Hello' };
// 错误做法:由于 bind 创建了不同的函数副本,因此不能被移除
let boundFunction = function () {console.log(this.message)}.bind(obj);
document.addEventListener('mousedown', boundFunction);
// 正确的做法之一是保存原始未绑定版本,并在必要时候手动传递 this 参数
function handleMouseDown() {
console.log(this.message);
}
obj.handleClickWithThisBound = handleMouseDown.bind(obj); // 只做一次绑定操作
document.addEventListener('mouseup', obj.handleClickWithThisBound);
```
#### 清楚地管理多个相同的事件类型
在同一节点上多次注册同一类型的事件(例如点击),并不会覆盖之前的监听者而是累积起来。这意味着如果不小心重复绑定了同样的逻辑代码片段,那么它将会被执行多遍。为了避免这种情况发生以及简化清理工作,可以在重新添加前先清除已有的对应监听项[^3]。
```javascript
// 设置全局变量存储监听器引用以便于管理和释放资源
var _pageHideListener;
function setupPageVisibilityChangeHandler(handlerFunc) {
if (_pageHideListener !== undefined) {
document.removeEventListener('visibilitychange', _pageHideListener);
}
_pageHideListener = handlerFunc;
document.addEventListener('visibilitychange', _pageHideListener);
}
```
综上所述,只要保持上述原则——采用具名函数代替匿名表达式、谨慎对待 `this` 和避免不必要的多重订阅——就能有效地利用 JavaScript 提供的强大工具集去灵活操控页面上的交互行为。
Unity中 Event.current 有哪些类型分别讲解下
在Unity中,Event.current是一个静态属性,代表当前正在处理的GUI事件。它是Unity中的Event类的实例,用于处理用户输入和其他GUI事件。Event.current会根据当前的事件类型(EventType)来确定其具体类型。下面是几个常见的Event.current类型:
1. EventType.MouseDown:当鼠标按下时触发。可以通过Event.current.button属性获取按下的鼠标按钮(0表示左键,1表示右键,2表示中键)。
2. EventType.MouseUp:当鼠标释放时触发。同样可以通过Event.current.button属性获取释放的鼠标按钮。
3. EventType.KeyDown:当键盘按下某个键时触发。可以通过Event.current.keyCode属性获取按下的键码。
4. EventType.KeyUp:当键盘释放某个键时触发。
5. EventType.MouseMove:当鼠标移动时触发。可以通过Event.current.mousePosition属性获取当前鼠标位置。
6. EventType.ScrollWheel:当鼠标滚轮滚动时触发。可以通过Event.current.delta属性获取滚动的距离。
7. EventType.Repaint:当需要绘制GUI时触发。通常用于在OnGUI函数中进行绘制操作。
这些只是Event.current可能的一些事件类型,根据具体需求和场景,还有其他类型的事件可以处理。在处理事件时,可以使用Event.current.type来判断当前事件的类型,并根据需要执行相应的操作。
阅读全文
相关推荐
















