最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

添加事件

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

在mounted中添加事件

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

這樣就添加成功了!

在這里插入圖片描述

移除事件

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

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

這里要注意 傳入的方法 this.scrollEvent 后面不能加括號(hào),否則無(wú)法成功添加

組件銷(xiāo)毀前移除事件

    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還可以給一個(gè)元素添加多個(gè)事件,并且不會(huì)覆蓋已存在的事件,這里就不多展開(kāi)了~

擴(kuò)展知識(shí):

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

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

此處為考慮瀏覽器兼容性推薦使用: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)切換離開(kāi)考試頁(yè)面超過(guò)'+max+"次系統(tǒng)將自動(dòng)提交答卷!", '警告', {
                confirmButtonText: '知道了',
                callback: action => {
                    this.msgSuccess("系統(tǒng)自動(dòng)提交答卷!");
                }
            });
            return;
        }
        this.$alert('你已經(jīng)切換離開(kāi)考試頁(yè)面'+n+'次,如果超過(guò)'+max+"次系統(tǒng)會(huì)自動(dòng)提交答卷,請(qǐng)認(rèn)真作答!", '警告', {
            confirmButtonText: '知道了',
            callback: action => {}
        });
    }
});

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

運(yùn)行后報(bào):

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

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

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

控制臺(tái)輸出信息:

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

我們使用document對(duì)象去調(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)切換離開(kāi)考試頁(yè)面超過(guò)'+max+"次系統(tǒng)將自動(dòng)提交答卷!", '警告', {
                confirmButtonText: '知道了',
                callback: action => {
                    this.msgSuccess("系統(tǒng)自動(dòng)提交答卷!");
                }
            });
            return;
        }
        this.$alert('你已經(jīng)切換離開(kāi)考試頁(yè)面'+n+'次,如果超過(guò)'+max+"次系統(tǒng)會(huì)自動(dòng)提交答卷,請(qǐng)認(rèn)真作答!", '警告', {
            confirmButtonText: '知道了',
            callback: action => {}
        });
    }
}
// 使用bind綁定的事件才是指向函數(shù),否則指向的是調(diào)用addEventListener的對(duì)象
document.addEventListener("visibilitychange", fn.bind(this));

詳解:

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

控制臺(tái)查看此時(shí)的this為

效果圖:

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

代碼如下所示:

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

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

相關(guān)文章

  • vue2和vue3子組件父組件之間的傳值方法

    vue2和vue3子組件父組件之間的傳值方法

    在組件化開(kāi)發(fā)的過(guò)程中難免會(huì)遇見(jiàn)子組件和父組件之間的通訊那么這里講關(guān)于vue2和vue3不同的通訊方式,文中有詳細(xì)的代碼示例供大家參考,感興趣的同學(xué)可以閱讀下
    2023-05-05
  • 利用vue對(duì)比兩組數(shù)據(jù)差異的可視化組件詳解

    利用vue對(duì)比兩組數(shù)據(jù)差異的可視化組件詳解

    這篇文章主要給大家介紹了關(guān)于利用vue對(duì)比兩組數(shù)據(jù)差異的可視化組件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Vue計(jì)算屬性的學(xué)習(xí)筆記

    Vue計(jì)算屬性的學(xué)習(xí)筆記

    這篇文章主要為大家詳細(xì)介紹了Vue計(jì)算屬性的學(xué)習(xí)筆記,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Vue+Openlayer中使用select選擇要素的實(shí)現(xiàn)代碼

    Vue+Openlayer中使用select選擇要素的實(shí)現(xiàn)代碼

    本文通過(guò)實(shí)例代碼給大家介紹Vue+Openlayer中使用select選擇要素,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-08-08
  • vue+Element-ui實(shí)現(xiàn)登錄注冊(cè)表單

    vue+Element-ui實(shí)現(xiàn)登錄注冊(cè)表單

    這篇文章主要為大家詳細(xì)介紹了vue+Element-ui實(shí)現(xiàn)登錄注冊(cè)表單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • vue項(xiàng)目使用axios發(fā)送請(qǐng)求讓ajax請(qǐng)求頭部攜帶cookie的方法

    vue項(xiàng)目使用axios發(fā)送請(qǐng)求讓ajax請(qǐng)求頭部攜帶cookie的方法

    今天小編就為大家分享一篇vue項(xiàng)目使用axios發(fā)送請(qǐng)求讓ajax請(qǐng)求頭部攜帶cookie的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • 用vue設(shè)計(jì)一個(gè)日歷表

    用vue設(shè)計(jì)一個(gè)日歷表

    這篇文章主要介紹了如何用vue設(shè)計(jì)一個(gè)日歷表,幫助大家更好的理解和學(xué)習(xí)vue框架,感興趣的朋友可以了解下
    2020-12-12
  • Vuejs開(kāi)發(fā)環(huán)境搭建及熱更新【推薦】

    Vuejs開(kāi)發(fā)環(huán)境搭建及熱更新【推薦】

    Vue.js是目前很火的一個(gè)前端框架,采用MVVM模式設(shè)計(jì),它是以數(shù)據(jù)驅(qū)動(dòng)和組件化的思想構(gòu)建的。本文重點(diǎn)給大家介紹Vuejs開(kāi)發(fā)環(huán)境搭建及熱更新的相關(guān)知識(shí),需要的朋友參考下吧
    2018-09-09
  • vue動(dòng)態(tài)路由實(shí)現(xiàn)多級(jí)嵌套面包屑的思路與方法

    vue動(dòng)態(tài)路由實(shí)現(xiàn)多級(jí)嵌套面包屑的思路與方法

    在實(shí)際項(xiàng)目中我們會(huì)碰到多層嵌套的組件組合而成,比如我們常見(jiàn)的面包屑導(dǎo)航,下面這篇文章就來(lái)給大家介紹關(guān)于vue實(shí)現(xiàn)動(dòng)態(tài)路由多級(jí)嵌套面包屑的思路與方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-08-08
  • 基于Vue實(shí)現(xiàn)卡片無(wú)限滾動(dòng)動(dòng)畫(huà)

    基于Vue實(shí)現(xiàn)卡片無(wú)限滾動(dòng)動(dòng)畫(huà)

    這篇文章主要為大家詳細(xì)介紹了如何利用Vue制作出卡片無(wú)限滾動(dòng)動(dòng)畫(huà),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定幫助,需要的可以參考一下
    2022-05-05

最新評(píng)論

建瓯市| 西乌珠穆沁旗| 胶州市| 兴山县| 客服| 湘潭市| 同仁县| 五台县| 措美县| 木里| 廊坊市| 大安市| 朔州市| 西青区| 邓州市| 东阿县| 射阳县| 醴陵市| 广饶县| 正阳县| 灵丘县| 波密县| 邹平县| 阿城市| 宾阳县| 深州市| 四会市| 江华| 合川市| 淮南市| 乳源| 高安市| 拉萨市| 贡觉县| 都兰县| 云霄县| 舞阳县| 长寿区| 台湾省| 修水县| 临邑县|