【业务场景】用户连点

处理用户连点

1.时间戳处理

思路:通过检查当前时间上一次触发事件的时间之间的间隔,判断是否允许继续执行。

代码如下:

js 复制代码
// clickThrottle.js
/* 防止重复点击 */
let clickTimer = 0

function clickThrottle(interval = 3000) {
    let now = new Date().getTime(); // 获取当前时间的时间戳
    let timer = clickTimer; // 记录触发事件的事件戳
	
    if (now - timer < interval) {
    	// 如果当前时间 - 触发事件时的事件 < interVal,那么不符合条件,直接return false,
    	// 不让当前事件继续执行下去
        return false;
    } else { 
    	// 反之,记录符合条件触发了事件的时间戳,并 return true,使事件继续往下执行
        clickTimer = now;
        return true;
    }
}

export default clickThrottle

如何使用?

首先引入上述js文件,如何将其应用到触发事件的响应函数中即可:

js 复制代码
import clickThrottle from '@/utils/clickThrottle.js'
...

...
handleEvent() {
    // 首先进行时间戳判断,若不符合条件则直接退出处理
    if(!clickThrottle(5000)) return
    // 后续进行事件的处理
    ...
}

2.节流

注意处理用户连点时,并不能单纯使用基础的节流函数,因为这样会导致用户的操作存在延迟,影响用户的使用体验,最好的方法是使用立即执行的节流函数。

参考:防抖与节流

使用节流函数处理用户连点存在一定的问题:由于点击后需要请求后端接口提交信息,而当用户网络较差时,网络请求的响应时间较长,当该时间超过了节流所控制的时间长度时,节流就失效了!这一问题实际上也是较难解决的,因为每一个用户的网络情况是不同的,并不好统一一个节流的时间长度。

3.按钮加载状态

为按钮添加加载状态,实际上是在所有能够实现该需求的方法中,用户体验最好的方法。

其实现方法是:

  1. 点击按钮时,待通过表单校验后,将按钮置为加载状态,禁止用户点击
  2. 请求后端接口提交数据,并等待接口响应;
  3. 在网络请求Promise的then方法中,进行提交成功的处理,在catch方法中,进行提交失败的处理。
  4. 最后,在Promise的finally方法中,重置按钮状态为正常状态,可进行点击

这样最终的效果是,当用户点击按钮后,按钮呈现加载状态,无法继续点击,等待后端处理完毕后,无论此次提交成功还是失败,按钮都可以再次点击(当然一般提交成功后会跳转离开)。

相关推荐
Hooray12 分钟前
前端暗黑模式的适配艺术
前端·vue.js·视觉设计
恋猫de小郭12 分钟前
解析华为 DevEco Code 和小米 MiMo Code,都基于 OpenCode ,有什么区别?
android·前端·ios
IT_陈寒14 分钟前
Vue的响应式让我原地裂开,你们也有这情况吗
前端·人工智能·后端
想吃火锅100530 分钟前
【leetcode】20.有效的括号js
linux·javascript·leetcode
问心无愧051331 分钟前
ctfshow web入门114
android·前端·笔记
aaaa9547266531 分钟前
终端与IDE形态Vibe Coding实测:主流AI编程工具迁移与迭代对比
javascript·react.js·ecmascript
晓得迷路了36 分钟前
栗子前端技术周刊第 133 期 - Angular v22、React 编译器 Rust 版、pnpm 11.5...
前端·javascript·css
一个被程序员耽误的厨师38 分钟前
02-架构篇-前端怎么反客为主把AI编排权拿回到自己手里
前端·人工智能·架构
云浪42 分钟前
别再让用户干等了:用 Express + SSE 实现《红楼梦》AI 问答实时输出
javascript·后端·node.js
羊羊小栈1 小时前
基于混合检索RAG的食品生产质量问答系统(BGE_BM25_大语言模型)
前端·人工智能·语言模型·自然语言处理·毕业设计·大作业