您好,登錄后才能下訂單哦!
這篇文章主要介紹“vue如何添加和移除事件”,在日常操作中,相信很多人在vue如何添加和移除事件問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”vue如何添加和移除事件”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
vue添加和移除事件的方法:1、通過“addEventListener()”方法添加事件句柄;2、通過“removeEventListener()”方法移除事件句柄。
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');
});復制代碼
則不會成功移除×,因為他們的監聽器函數并不是指向同一個。
事件傳遞有兩種方式:冒泡與捕獲。
事件傳遞定義了元素事件觸發的順序。 如果將 <p> 元素插入到 <div> 元素中,用戶點擊 <p> 元素, 哪個元素的 “click” 事件先被觸發呢?
在 冒泡 中,內部元素的事件會先被觸發,然后再觸發外部元素,即: <p> 元素的點擊事件先觸發,然后會觸發 <div> 元素的點擊事件。
在 捕獲 中,外部元素的事件會先被觸發,然后才會觸發內部元素的事件,即: <div> 元素的點擊事件先觸發 ,然后再觸發 <p> 元素的點擊事件。
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);
通常寫法:
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);
}
}
事件操作和節流融合一起,所以要理解節流的實現原理。
到此,關于“vue如何添加和移除事件”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。