vue添加和移除事件的方法:1、通过“addeventlistener()”方法添加事件句柄;2、通过“removeeventlistener()”方法移除事件句柄。

本教程操作环境:windows10系统、vue 3版、dell g3电脑。
vue怎么添加和移除事件?
vue事件添加和移除
.removeeventlistener() 方法要求我们向其传递与传递给 .addeventlistener() 的函数 完全相同的监听器函数。
完全相同 意味着:
- 具有相同的目标
- 具有相同的类型
- 并传递完全相同的监听器
定义和用法
removeeventlistener() 方法用于移除由 addeventlistener() 方法添加的事件句柄。
注意: 如果要移除事件句柄,addeventlistener() 的执行函数必须使用外部函数,如上实例所示 (myfunction)。
匿名函数,类似 "document.removeeventlistener("event", function(){ myscript });" 该事件是无法移除的。
例如:
{ name: 'richard' } === { name: 'richard' }复制代码的答案会是false,因为他们属于不同的实体。
那么,什么样的可以成功移除呢?
function myeventlisteningfunction() {
console.log('howdy');
}
// 为 点击 事件添加一个监听器,来运行 `myeventlisteningfunction` 函数
document.addeventlistener('click', myeventlisteningfunction);
// 立即移除 应该运行`myeventlisteningfunction`函数的 点击 事件监听器
document.removeeventlistener('click', myeventlisteningfunction);复制代码这个可以√,因为他们都指向myeventlisteningfunction()这同一个方法。
而如果是
// 为 点击 事件添加一个监听器,来运行 `myeventlisteningfunction` 函数
document.addeventlistener('click', function myeventlisteningfunction() {
console.log('howdy');
});
// 立即移除 应该运行`myeventlisteningfunction`函数的 点击 事件监听器
document.removeeventlistener('click', function myeventlisteningfunction() {
console.log('howdy');
});复制代码则不会成功移除×,因为他们的监听器函数并不是指向同一个。
事件传递有两种方式:冒泡与捕获。
事件传递定义了元素事件触发的顺序。 如果将
元素插入到
元素, 哪个元素的 “click” 事件先被触发呢?
在 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即:
元素的点击事件先触发,然后会触发
在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即:
元素的点击事件。
addeventlistener() 方法可以指定 “usecapture” 参数来设置传递类型:
addeventlistener(event, function, usecapture);
默认值为 false, 即冒泡传递,当值为 true 时, 事件使用捕获传递。
removeeventlistener() 方法移除由 addeventlistener() 方法添加的事件句柄:
element.removeeventlistener("mousemove", myfunction);
浏览器兼容处理
var x = document.getelementbyid("mybtn");
if (x.addeventlistener) { // 所有主流浏览器,除了 ie 8 及更早版本
x.addeventlistener("click", myfunction);
} else if (x.attachevent) { // ie 8 及更早版本
x.attachevent("onclick", myfunction);
}ie 8 及更早 ie 版本,opera 7.0及其更早版本不支持 addeventlistener() 和 removeeventlistener() 方法。但是,对于这类浏览器版本可以使用 detachevent() 方法来移除事件句柄:
element.attachevent(event, function); element.detachevent(event, function);
vue怎么添加和移除事件-尊龙凯时
通常写法:
created() {
window.addeventlistener("scroll", this.throttle());
},
destroyed() {
window.removeeventlistener("scroll", this.throttle());
}
// methods
throttle() {
let lasttime = new date();
let timer = null;
return () => {
let starttime = new date();
let remaining = 200 - (starttime - lasttime);
cleartimeout(timer);
if (starttime - lasttime > 200) {
lasttime = starttime;
this.scroll.call(this);
} else {
// 最后一次也执行
timer = settimeout(() => {
this.scroll.call(this);
}, remaining);
}
};
}
都是错误的,呵呵。
问题的原因和“data为什么是函数”是一样的。节流函数throttle每次返回的函数是不一样的,所以,remove的函数和add的函数式不一样的。处理的方法就是对 节流 函数进行改造。(当然你也可以不节流就没有事了)
created() {
this.lasttime = new date();
this.timer = null;
window.addeventlistener("scroll", this.throttle);
},
destroyed() {
window.removeeventlistener("scroll", this.throttle);
}
// methods
throttle() {
let starttime = new date();
let remaining = 200 - (starttime - this.lasttime);
cleartimeout(this.timer);
if (starttime - this.lasttime > 200) {
this.lasttime = starttime;
this.scroll.call(this);
} else {
// 最后一次也执行
this.timer = settimeout(() => {
this.scroll.call(this);
}, remaining);
}
}事件操作和节流融合一起,所以要理解节流的实现原理。。
- 0
- 0
- 0
- 0
格里芬给力芬