【CSS节流】实现防止按钮重复点击

众所周知,函数节流(throttle)是 JS 中一个非常常见的优化手段,可以有效的避免函数过于频繁的执行。

举例:在JavaScript中,可以使用节流(throttling)来控制事件的触发频率,以确保在一定时间内只执行一次相应的操作。对于保存按钮的点击行为,可以使用节流函数来确保在一定时间内只允许提交一次。

以下是使用js进行节流的方式:

javascript 复制代码
function throttle(func, delay) {
  let canRun = true;
  return function() {
    if (canRun) {
      func.apply(this, arguments);
      canRun = false;
      setTimeout(() => {
        canRun = true;
      }, delay);
    }
  };
}

// 模拟一个保存操作的函数
function saveData() {
  console.log("数据已保存");
}

// 创建节流函数
var throttledSave = throttle(saveData, 300); // 300ms为节流的时间间隔

// 绑定按钮点击事件
document.getElementById('saveBtn').addEventListener('click', throttledSave);

其实除了 JS 方式, CSS 也可以非常轻易的实现这样一个功能,无需任何框架库,一起看看吧!

一、CSS 实现思路分析

CSS 实现和 JS 的思维不同,需要从另一个角度去看待这个问题。

比如这里需要对点击事件进行限制,可以使用pointer-events;

然后是时间的限制,每次点击后需要自动禁用300ms,可以使用animation;

除此之外,还需要有点击行为,所以必然和伪类:active有关联。

二、具体实现:CSS 动画的精准控制

假设有一个按钮,绑定了一个点击事件,这时连续点击按钮就会不断地触发:

html 复制代码
<button onclick="console.log('保存')">保存</button>

完整代码如下,很好地限制了点击频率:

css 复制代码
button{
  /*动画缓动函数:设置成了step-end阶梯曲线,它可以很方便的控制pointer-events的变化时间点。*/
  animation: throttle 2s step-end forwards;
}

button:active{
  animation: none;
}

@keyframes throttle {
  from {
    pointer-events: none;
  }
  to {
    pointer-events: all;
  }
}

完成~

相关推荐
程序员黑豆2 小时前
Java 注释详解:单行、多行与文档注释的完整指南
java·前端·ai编程
剪刀石头布啊2 小时前
antd中可编辑表格中巧用useWatch实现联动高性能效果,以及定制延伸学习
前端
油丶酸萝卜别吃2 小时前
前端转全栈学习路线
前端·学习
浮生望3 小时前
前端路由进阶:History API原理与手写HistoryRouter
前端
陆枫Larry3 小时前
JavaScript 中的竞态是什么,为啥会有竟态?
前端
上海安当技术5 小时前
半天接入:USBKey RESTful API + C 动态库,Web 和 C/S 两套集成路径实战
前端·后端·restful·集成·usbkey
DevUI团队6 小时前
从“即兴创作”到“规格先行”,华为云码道(CodeArts)代码智能体持续深耕企业级规范驱动开发能力
前端·人工智能·后端
weixin_431600447 小时前
NestJS 入门(3):Guard 如何挡住未登录请求?
前端·后端·学习·nest.js
kyriewen7 小时前
我用Claude Code两天干完了团队两周的排期——周报发出去那一刻我就后悔了
前端·javascript·ai编程
IT_陈寒7 小时前
JavaScript类型转换把我坑惨了,这破玩意真该早点搞明白
前端·人工智能·后端