欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

js如何防止按鈕重復點擊

這篇文章主要為大家展示了“js如何防止按鈕重復點擊”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“js如何防止按鈕重復點擊”這篇文章吧。

10余年的太白網站建設經驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都全網營銷的優(yōu)勢是能夠根據用戶設備顯示端的尺寸不同,自動調整太白建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯從事“太白網站設計”,“太白網站推廣”以來,每個客戶項目都認真落實執(zhí)行。

1.粗暴簡單辦法

直接定義一個變量,每次點擊過后等所有操作結束后釋放變量?;蚴褂胠oading防止用戶點擊

//* 部分代碼
<script>
export default {
  methods: {
    onSubmit() {
      if (this.lock) return;
      this.lock = true;
      // const load = this.$loading();
      this.$http.create().then((res) => {
        // do something
        this.lock = false;
        // load.close();
      }).catch(() => {
        this.lock = false;
        // load.close();
      })
    }, 
  },
}
</script>

這種辦法簡單粗暴,但是每次需要防止重復點擊的地方,都要去關注lock或者loading的重置,總覺的很啰嗦。也沒辦法好好的抽離出來。(PS:能力有限,自己也沒有想到比較好的辦法在上層優(yōu)雅的封裝出來)

2.直接把loading放到http請求中去做,統(tǒng)一封裝方法

//* 部分代碼
...
let load;
http.interceptors.request.use((config) => {
  load = Loading();
  ...
  return config;
}, error => {
  load.close();
  return Promise.reject(error)
});

http.interceptors.response.use((response) => {
  load.close();
  ...
  return response; 
},error => {
  load.close();
  return Promise.reject(error);
});

這種辦法在實際中也用過了一段時間,一開始挺好用的,但是在后面自己弱網測試的時候發(fā)現也是會導致重復點擊的情況。而且在有些時候loading圖并不是所有請求都需要,還要去做個是否顯示loading的配置,這樣感覺http請求又笨重了,也沒有讓重復點擊功能抽離出來。

3.裝飾器方法

說到裝飾器,最經典的應用場景就是面向切片編程(AOP),《前端常用設計模式(1)--裝飾器(decorator)》juejin.im/post/5cb415… 做出了很棒的理解與應用。得益于ES7和TS,裝飾器在Angular和react中都有很多案例,因為Vue中Class不是必選,所以在Vue中很少看到使用裝飾器的,得益于官方有vue-class-component來使用Class進行創(chuàng)建組件的方法,開始了自己的嘗試之路。

lock.js

export function lock(target, key, desc) {
  const fn = desc.value;
  //* 沒有使用箭頭函數是為了讓this能指回到vue,這樣就可以獲取到vue的data,從而做更多的事情,下面會講到
  desc.value = async function() {
    if (this.$lock) return;
    this.$lock = true;
    await fn.apply(this).catch(() => {
      this.$lock = false;
    });
    this.$lock = false;
    return target;
  };
}

index.vue

<template>
  <!-- do something -->
</template>
<script>
import Vue from 'vue';
import Component from 'vue-class-component';
import { lock } from './lock';

@Component
export default class extends Vue {
  @lock
  async onSubmit() {
    await this.$http.create();
    // do something
  }
}
</script>

感覺這樣就完全抽離了重復點擊的功能(PS:好像是這樣的),也能獨立測試,想在哪里用就在哪里用。感覺不足的是,裝飾器里需要讓this重新指回vue才能獲取到vue的data

4.舉一反三

既然重復點擊可以從業(yè)務代碼中抽離出來,那我們提交表單的字段驗證也就同樣可以抽離出來了。(PS:所有UI框架都有成熟的form表單驗證組件,就當我是瞎折騰)

validate.js

export function validate(target, key, desc) {
 const fn = desc.value;

 desc.value = async function () {
  const {
   name, phone,
  } = this.data;
  
  if (!name) {
   return confirm('請輸入您的姓名');
  }
  if (name.length > 20) {
   return confirm('您的姓名不能超過20個字');
  }
  if (!phone) {
   return confirm('請輸入您的電話');
  }
  if (!((/^\d{11}$/.test(phone)))) {
   return confirm('請輸入11位的電話號碼');
  }
  
  await fn.apply(this);
  return target;
 };
}

index.vue

<template>
  <!-- do something -->
</template>
<script>
import Vue from 'vue';
import Component from 'vue-class-component';
import { validate } from './validate';

@Component
export default class extends Vue {
  data = {
    name: '',
    phone: '',
  }
  
  @validate
  async onSubmit() {
    await this.$http.create();
    // do something
  }
}
</script>

5.防抖方法(補充)

有小伙伴說可以使用防抖,個人覺得還是需要看場景,這里也就列出防抖的方法。

防抖方法是一個很好限制重復事件頻繁觸發(fā)的,經常用在scroll、resize事件上,也可以嘗試用在重復點擊上面。但是如果點擊事件后需要有異步處理,單單使用防抖方法也會沒辦法限制弱網(PS:吐槽一下成都地鐵上移動經常網絡不好)下重復點擊的情況。如:防抖時間為1秒,但是請求花掉了2秒才返回數據給前端進行處理,中間產生了時間差,導致用戶有時間重復點擊。所以個人覺得還是需要配合其它辦法。同樣列出防抖的列子:

throttle.js

const throttle = function(fn, wait, scope) {
  clearTimeout(throttle.timer);
  throttle.timer = setTimeout(function() {
    fn.apply(scope);
  }, wait);
};

index.vue

<template>
  <!-- do something -->  
</template>
<script>
export default {
  onSubmit() {
    throttle(() => {
      this.$http.create().then((result) => {
        // do something
      });
    }, 1000);
  },
};
</script>

以上是“js如何防止按鈕重復點擊”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯行業(yè)資訊頻道!

標題名稱:js如何防止按鈕重復點擊
標題URL:http://aaarwkj.com/article32/jjpdsc.html

成都網站建設公司_創(chuàng)新互聯,為您提供云服務器、營銷型網站建設、全網營銷推廣、動態(tài)網站、微信公眾號、品牌網站制作

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

成都做網站
午夜视频在线观看免费高清国产| 国产亚洲精品一区久久| av天堂久久人妻精品加勒比| 色婷婷激一区二区三区| 激情五月婷婷久久激情| 无遮挡国产精品一级二级三级视频 | 亚洲男人天堂日本一区| 看看永久成人免费视频| 日韩中文字幕在线首页| 亚洲成人精品夫妻av| 三级视频一区二区三区| 色悠悠色综合视频在线| 国产高清白丝免费在线观看| 麻豆片免费观看在线看| 亚洲国模av一区二区三区| 五月天丁香婷婷狠狠狠| 国产精品久久久av大片| 久久97精品人人做人人爽| 日本熟女中文字幕一区| 亚洲国产日韩精品一区二| 国产白丝扒开做爽爽爽网站| 日本毛茸茸的丰满熟妇| 日韩高清在线不卡视频| 97在线亚洲欧美视频| 日韩人妻中文字幕专区| 日韩看片一区二区三区高清| 国产在线一区二区三区蜜桃| 少妇激情一区二区三区免费视频 | 久久精品国产亚洲av久一一区| 亚洲精品国产精品成人 | 中文字幕免费日本在线| 午夜免费成人在线视频| 欧美在线观看黄片视频| 成人精品国产一区二区| 日韩精品一二三黄色一级| 亚洲六月丁香六月婷婷| 成人在线一区二区三区观看| 精品视频日韩在线观看| 日韩精品成人区中文字幕| 亚洲情欲一级片日韩欧美| 亚洲精品国产第一区|