焦点要闻:vue怎么添加和移除事件

时间:2022-12-22 09:52:23       来源:PHP中文网

本教程操作环境: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());}// methodsthrottle() {    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);}// methodsthrottle() {  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);  }}
登录后复制

事件操作和节流融合一起,所以要理解节流的实现原理。。

推荐学习:《vue.js视频教程》

以上就是vue怎么添加和移除事件的详细内容,更多请关注php中文网其它相关文章!

关键词: 完全相同 最后一次