亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

對于防止按鈕重復點擊的嘗試詳解

2024-05-06 16:50:11
字體:
來源:轉載
供稿:網友

導語:隨著接觸的項目增加,很多項目都是遇到同樣的問題,而每次都是使用一貫的手法進行處理。有時候有些方法并不是那么的優雅甚至有些冗余,所以自己也想開始嘗試不同的方法去解決同樣的問題。

我經常在項目中會遇到按鈕重復點擊后引起表單的重復點擊問題。所以針對這個問題,自己嘗試了幾種辦法分別去解決。直接上代碼。

1.粗暴簡單辦法

直接定義一個變量,每次點擊過后等所有操作結束后釋放變量。或使用loading防止用戶點擊

//* 部分代碼<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:能力有限,自己也沒有想到比較好的辦法在上層優雅的封裝出來)

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

//* 部分代碼...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);});

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

3.裝飾器方法

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

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';@Componentexport default class extends Vue {  @lock  async onSubmit() {    await this.$http.create();    // do something  }}</script>

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

4.舉一反三

既然重復點擊可以從業務代碼中抽離出來,那我們提交表單的字段驗證也就同樣可以抽離出來了。(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';@Componentexport default class extends Vue {  data = {    name: '',    phone: '',  }    @validate  async onSubmit() {    await this.$http.create();    // do something  }}</script>

5.防抖方法(補充)

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

防抖方法是一個很好限制重復事件頻繁觸發的,經常用在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>

以上所述是小編給大家介紹的對于防止按鈕重復點擊的嘗試詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品日韩电影| 久久精品国产免费观看| 欧美日韩加勒比精品一区| 国产欧美精品一区二区三区-老狼| 日韩a**中文字幕| 精品久久久久久久久久久久久久| 欧美成人网在线| 精品国内亚洲在观看18黄| 国产欧美精品在线| 91免费人成网站在线观看18| 日本国产精品视频| 国产精品一区二区女厕厕| 亚洲精品电影网站| 久久久精品999| 亚洲天堂av电影| 亚洲国产精品嫩草影院久久| 91精品国产自产在线观看永久| 欧美激情亚洲自拍| 国产区精品视频| 久久人人爽国产| 国产成人精品久久二区二区91| 久久精品视频免费播放| 国内精品久久久久影院 日本资源| 国产精品久久久久91| 亚洲在线观看视频网站| 亚洲精品在线看| 清纯唯美亚洲综合| 欧美精品一区二区三区国产精品| 亚洲亚裔videos黑人hd| 黑人极品videos精品欧美裸| 国产精品美女www爽爽爽视频| 秋霞av国产精品一区| 国产一区香蕉久久| 成人a级免费视频| 日韩大陆欧美高清视频区| 中文字幕av一区中文字幕天堂| 国产在线视频一区| 国产91在线播放精品91| 欧美成人性生活| 国产日韩精品在线播放| 亚洲第一国产精品| 久久成人av网站| 欧美xxxwww| 亚洲肉体裸体xxxx137| 2020欧美日韩在线视频| 日韩少妇与小伙激情| www.欧美精品一二三区| 国内精品美女av在线播放| 国产中文字幕亚洲| 欧美猛少妇色xxxxx| 国产精品久久久久aaaa九色| 精品动漫一区二区| 亚洲一区二区国产| 亚洲色图日韩av| 俺去亚洲欧洲欧美日韩| 日日狠狠久久偷偷四色综合免费| 国产精品高潮呻吟久久av野狼| 国产精品va在线播放| 精品福利一区二区| 国产精品老牛影院在线观看| 欧美亚洲国产另类| 97视频免费在线观看| 麻豆成人在线看| 亚洲第一精品夜夜躁人人躁| 国产在线精品播放| 国产999精品久久久影片官网| 蜜臀久久99精品久久久无需会员| 午夜欧美大片免费观看| 国产一区二区av| 欧美激情国产日韩精品一区18| 国产剧情日韩欧美| 欧美日韩国内自拍| 国产精品美腿一区在线看| 国产精品三级久久久久久电影| 欧美黑人狂野猛交老妇| 日韩极品精品视频免费观看| 亚洲自拍偷拍视频| 91网站免费观看| 亚洲综合在线小说| 欧美成人剧情片在线观看| 超碰91人人草人人干| 国产91精品久久久久久久| 亚洲精品中文字| 一本一道久久a久久精品逆3p| 欧美乱大交xxxxx| 91成人免费观看网站| 亚洲欧美国产日韩中文字幕| 亚洲综合中文字幕68页| 国产精品嫩草影院一区二区| 国产suv精品一区二区三区88区| 日本精品免费观看| 在线观看日韩视频| 992tv成人免费影院| 狠狠干狠狠久久| 一二美女精品欧洲| 久久影视电视剧免费网站清宫辞电视| 国产热re99久久6国产精品| 亚洲自拍偷拍在线| 国产精品自产拍在线观看中文| 国产精品中文字幕在线观看| 成人激情视频在线| 日韩日本欧美亚洲| 国产精品久久久久久av福利| 91色精品视频在线| 午夜精品福利视频| 亚洲人成自拍网站| 中文字幕最新精品| 欧美大成色www永久网站婷| 狠狠躁天天躁日日躁欧美| 国产91在线播放精品91| 国产一区二区香蕉| 欧美激情一区二区三区久久久| 欧美黑人性猛交| 国产在线a不卡| 久久久电影免费观看完整版| 日韩精品电影网| 成人夜晚看av| 中文字幕在线看视频国产欧美在线看完整| 欧洲精品毛片网站| 欧美日韩一区二区三区在线免费观看| 亚洲欧美综合另类中字| 亚洲xxxx18| 成人一区二区电影| 国产精品老女人精品视频| 国产精品网站入口| 国产精品久久久久久一区二区| 亚洲偷欧美偷国内偷| 中文字幕亚洲一区二区三区| 亚洲乱码av中文一区二区| 成人网址在线观看| 97成人精品视频在线观看| 亚洲va国产va天堂va久久| 日韩不卡在线观看| 久久成人18免费网站| 国产亚洲精品久久久久动| 国产精品一区二区久久国产| 国产精品国产三级国产aⅴ浪潮| 久久成年人视频| 一级做a爰片久久毛片美女图片| 欧美日韩精品在线播放| 国产精品第2页| 欧美激情videos| 一区二区三区www| 欧美日韩第一视频| 精品亚洲一区二区三区| 57pao国产精品一区| 伊人av综合网| 日韩免费在线观看视频| 91精品久久久久久久久不口人| 欧美成人午夜激情在线| 久久国产精品久久久久久久久久| 欧美成人黄色小视频| 国产成人综合亚洲| 国产亚洲欧美日韩精品| 久久久免费av| 亚洲视频一区二区| 亚洲美女福利视频网站| 91在线观看免费观看| 日韩电影大全免费观看2023年上| 亚洲伊人第一页| 成人福利在线观看| 午夜精品视频在线| 欧美xxxx18性欧美| 日韩欧美有码在线|