欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue中使用addEventListener添加事件、removeEventListener移除事件的示例詳解

 更新時間:2022年12月31日 09:12:10   作者:阿爾法哲  
最近在項目中需要用到addEventListener監(jiān)聽滾動條滾動的高度,所以就研究了一下在vue中是怎么進(jìn)行事件監(jiān)聽的,添加事件和移除事件結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧

在vue中如何使用addEventListener添加事件、removeEventListener移除事件

最近在項目中需要用到addEventListener監(jiān)聽滾動條滾動的高度,所以就研究了一下在vue中是怎么進(jìn)行事件監(jiān)聽的。

添加事件

給要添加事件的元素加上ref屬性

在mounted中添加事件

    mounted() {
      this.$refs.box.addEventListener('scroll',()=>{
        console.log('scroll',this.$refs.box.scrollTop)
      });
    }

這樣就添加成功了!

在這里插入圖片描述

移除事件

如果要移除已添加的事件,removeEventListener中傳入的方法必須和addEventListener中傳入的是同一個方法才能成功移除,所以在添加時就不能用匿名函數(shù)啦。需改成如下寫法

    mounted() {
      this.$refs.box.addEventListener('scroll',this.scrollEvent);
    },
    methods:{
      scrollEvent(){
        console.log('scroll',this.$refs.box.scrollTop)
      }
    }

這里要注意 傳入的方法 this.scrollEvent 后面不能加括號,否則無法成功添加

組件銷毀前移除事件

    beforeDestroy() {
      this.$refs.box.removeEventListener('scroll',this.scrollEvent);
    }

如果是keep-alive組件,可以用下面這種方式

  activated() {
    this.$refs.box.addEventListener('scroll', this.scrollEvent);
  },
  deactivated(){
    this.$refs.box.removeEventListener('scroll',this.scrollEvent);
  },

另外,addEventListener還可以給一個元素添加多個事件,并且不會覆蓋已存在的事件,這里就不多展開了~

擴展知識:

解析Vuejs使用addEventListener的事件觸發(fā)執(zhí)行函數(shù)的this問題

1、使用瀏覽器監(jiān)聽切屏為例

此處為考慮瀏覽器兼容性推薦使用:document.addEventListener

1.1、正常函數(shù)使用如下:

let n = 0;
let max = 3; //   切屏最大次數(shù)
document.addEventListener("visibilitychange", function () {
    if(document.visibilityState == 'hidden'){
        n++;
    } else if(document.visibilityState == 'visible') {
        if (n > max) {
            this.$alert('你已經(jīng)切換離開考試頁面超過'+max+"次系統(tǒng)將自動提交答卷!", '警告', {
                confirmButtonText: '知道了',
                callback: action => {
                    this.msgSuccess("系統(tǒng)自動提交答卷!");
                }
            });
            return;
        }
        this.$alert('你已經(jīng)切換離開考試頁面'+n+'次,如果超過'+max+"次系統(tǒng)會自動提交答卷,請認(rèn)真作答!", '警告', {
            confirmButtonText: '知道了',
            callback: action => {}
        });
    }
});

this.$alert()為vue的MessageBox彈框組件

運行后報:

提示this.$alert()不是一個函數(shù)

此時我們嘗試在document函數(shù)里面打印this到控制臺看看

console.log("this===",this);

控制臺輸出信息:

指向的是調(diào)用addEventListener的對象

我們使用document對象去調(diào)用VueJS的組件函數(shù)肯定是行不通的,那么怎樣可以拿到VueJS的this呢?我們只需稍作修改

1.2、bind()綁定事件指定函數(shù)

修改后的代碼如下:

let n = 0;
let max = 3; //   切屏最大次數(shù)
let fn = function () {
    console.log("this===",this);
    if(document.visibilityState == 'hidden'){
        n++;
    } else if(document.visibilityState == 'visible') {
        if (n > max) {
            this.$alert('你已經(jīng)切換離開考試頁面超過'+max+"次系統(tǒng)將自動提交答卷!", '警告', {
                confirmButtonText: '知道了',
                callback: action => {
                    this.msgSuccess("系統(tǒng)自動提交答卷!");
                }
            });
            return;
        }
        this.$alert('你已經(jīng)切換離開考試頁面'+n+'次,如果超過'+max+"次系統(tǒng)會自動提交答卷,請認(rèn)真作答!", '警告', {
            confirmButtonText: '知道了',
            callback: action => {}
        });
    }
}
// 使用bind綁定的事件才是指向函數(shù),否則指向的是調(diào)用addEventListener的對象
document.addEventListener("visibilitychange", fn.bind(this));

詳解:

將觸發(fā)事件后執(zhí)行的函數(shù)抽到外部,作為外部函數(shù)并賦予函數(shù)名在事件中使用函數(shù)名.bind('指定函數(shù)');即可在執(zhí)行的函數(shù)中獲取到bind綁定的指定函數(shù)

控制臺查看此時的this為

效果圖:

下面介紹下vue 監(jiān)聽事件addEventListener

代碼如下所示:

// vue 添加監(jiān)聽事件,addEventListener第二個參數(shù)要綁在this上,即需要在methods中聲明,否則銷毀的時候會報錯
// 在mounted中監(jiān)聽,在beforeDestroy中銷毀,綁定的事件在methods中聲明
mounted() {
    // 監(jiān)聽
    window.addEventListener('resize', this.handleEventListener)
  },
beforeDestroy() {
  // 銷毀
  window.removeEventListener('resize', this.handleEventListener)
},
methods: {
  // 監(jiān)聽執(zhí)行的事件
  handleEventListener() {
    
  },
}

到此這篇關(guān)于解析Vuejs使用addEventListener的事件觸發(fā)執(zhí)行函數(shù)的this問題的文章就介紹到這了,更多相關(guān)vuejs addEventListener的事件觸發(fā)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue系列之Element?UI表單自定義校驗規(guī)則

    Vue系列之Element?UI表單自定義校驗規(guī)則

    表單校驗是注冊環(huán)節(jié)中必不可少的操作,表單校驗可以提醒用戶填寫數(shù)據(jù)規(guī)則以確保用戶提交數(shù)據(jù)的效性,也可以防止用戶因誤操作而占用服務(wù)器資源,這篇文章主要給大家介紹了關(guān)于Vue系列之Element?UI表單自定義校驗規(guī)則的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • vue中g(shù)et和post請求的區(qū)別點總結(jié)

    vue中g(shù)et和post請求的區(qū)別點總結(jié)

    在本篇文章里小編給大家分享的是一篇關(guān)于vue中g(shù)et和post請求的區(qū)別點總結(jié)內(nèi)容,對此有興趣的朋友們可以跟著學(xué)習(xí)下。
    2021-12-12
  • vue頁面渲染數(shù)組中數(shù)據(jù)文案后添加逗號最后不加

    vue頁面渲染數(shù)組中數(shù)據(jù)文案后添加逗號最后不加

    這篇文章主要為大家介紹了vue頁面渲染數(shù)組中數(shù)據(jù)文案后添加逗號最后不加逗號示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Vue.js項目實戰(zhàn)之多語種網(wǎng)站的功能實現(xiàn)(租車)

    Vue.js項目實戰(zhàn)之多語種網(wǎng)站的功能實現(xiàn)(租車)

    這篇文章主要介紹了Vue.js項目實戰(zhàn)之多語種網(wǎng)站(租車)的功能實現(xiàn) ,需要的朋友可以參考下
    2019-08-08
  • vue進(jìn)度條組件實現(xiàn)代碼(可拖拽可點擊)

    vue進(jìn)度條組件實現(xiàn)代碼(可拖拽可點擊)

    在日常開發(fā)中隨著需求的個性化,邏輯的復(fù)雜化,自定義組件也變得越來越常見,這篇文章主要給大家介紹了關(guān)于vue進(jìn)度條組件實現(xiàn)(可拖拽可點擊)的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • vue打包通過image-webpack-loader插件對圖片壓縮優(yōu)化操作

    vue打包通過image-webpack-loader插件對圖片壓縮優(yōu)化操作

    這篇文章主要介紹了vue打包通過image-webpack-loader插件對圖片壓縮優(yōu)化操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • React和Vue實現(xiàn)路由懶加載的示例代碼

    React和Vue實現(xiàn)路由懶加載的示例代碼

    路由懶加載是一項關(guān)鍵技術(shù),它可以幫助我們提高Web應(yīng)用的加載速度,本文主要介紹了React和Vue實現(xiàn)路由懶加載的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • vue中如何進(jìn)行異步請求

    vue中如何進(jìn)行異步請求

    前端的數(shù)據(jù)均是通過接口請求拿到的,而Vue本身不支持ajax請求,那么該怎么解決Vue中的異步請求呢?這兒提供了幾種方法,希望對大家有所幫助
    2022-05-05
  • Vue數(shù)據(jù)雙向綁定的實現(xiàn)方式講解

    Vue數(shù)據(jù)雙向綁定的實現(xiàn)方式講解

    Vue數(shù)據(jù)雙向綁定原理:Vue內(nèi)部通過Object.defineProperty方法屬性攔截的方式,把data對象里每個數(shù)據(jù)的讀寫轉(zhuǎn)化成getter/setter,當(dāng)數(shù)據(jù)變化時通知視圖更新
    2022-08-08
  • Vue的路由及路由鉤子函數(shù)的實現(xiàn)

    Vue的路由及路由鉤子函數(shù)的實現(xiàn)

    這篇文章主要介紹了Vue的路由及路由鉤子函數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07

最新評論