Vue:設(shè)置點擊觸發(fā)間隔(ps:通過透明模板層實現(xiàn))

說明

項目開發(fā)過程中,一開始并沒有考慮到誤觸導(dǎo)致的問題,后來發(fā)現(xiàn)提交按鈕在快速點擊,或誤觸快速觸發(fā)的情況下會進行兩次提交.后來我想,不然在請求的時候進行短時間內(nèi),相同請求的過濾.于是百度尋找方法,方法是找到了,可是有時候快速點擊需要切換的頁面時,會終止需要觸發(fā)的請求.那么問題來了,要如何解決?后來索性我就想到了這個辦法,感覺簡單了很多

代碼與解說

一 思路

1.通過在App.js中建立比<router-view />層級更高的全屏模塊蓋住頁面,使得在設(shè)置的時間內(nèi)除第一次外的點擊都點擊在該層上.
2.我通過addEventListener全局監(jiān)聽了click事件

二 代碼與解說

1.直接上代碼(以下......省略號為省略代碼,與此次實現(xiàn)無關(guān))
講解:以下代碼為App.js中

<template>
  <div id="app">
    <router-view />
    <div class="mask_the_only" v-show="flag"></div>
  </div>
</template>

<script>
export default {
  name: "App",
  data() {
    return {
      time: "",
      flag: false
    };
  },

  methods: {
    // mask層出現(xiàn)與定時清除
    maskShow_clear(e) {
      console.log(e.path[0].className);
      // console.log(e)
      if (e.path[0].className == "mask_the_only") {
        return;
      }
      // 一旦點擊在mask層上就會被停止所以不會進入到以下代碼
      this.flag = true;
      this.time = setTimeout(() => {
        this.flag = false;
      }, 300);
      // 倒計時內(nèi)無法觸發(fā)點擊mack以外的點擊事件,也就說為事件間隔時間
    }
  },

  mounted() {
    window.addEventListener("click", this.maskShow_clear);
  },

  beforeDestroy() {
    // 清除定時器
    clearInterval(this.time);
    // 實例銷毀之前對點擊事件進行解綁
    window.removeEventListener("click", this.maskShow_clear);
  }
};
// #region--該頁面待優(yōu)化
/**
 * 一.通過監(jiān)聽全局點擊會使得不管點擊在哪里都會喚出mack層,優(yōu)化到點擊了按鈕觸發(fā)mack層
 * **(由于各組件用到的標(biāo)簽不同,不能直接去判斷是否為btn標(biāo)簽,
 * **主要為了解決防止重復(fù)請求,但是有些按鈕是不帶請求的,
 * **按鈕觸發(fā)的對話框存在請求,目前就先這么處理)
 */
// #endregion
</script>
<style lang="scss" scoped>
.mask_the_only {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 999999999;
}
</style>

三 總結(jié)

1.可能這個方法看起來比較笨,但是我覺得吧,在路由中進行各種操作有時候?qū)ξ业哪芰κ且粋€極大的考驗,我還是喜歡簡單來得快的東西.
2.我沒有對mask層進行冒泡或捕獲相關(guān)的清除,如有需要,記得添加.
3.最后感謝能看到這篇文章的同學(xué)們,希望對你們有幫助.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容