利用css 动画实现节流

news2025/7/10 17:04:53

节流指的避免过于频繁的执行一个函数,例如:一个保存按钮,为了避免重复提交或者服务器考虑,往往需要对点击行为做一定的限制,不然会频繁的请求接口,之前基本上是通过js去控制节流问题,其实css也能做到节流

一、 css 实现思路(需要用到 pointer-events、animation以及:active)

  1. 对点击事件进行限制,也就是禁用点击事件,利用pointer-events
  • pointer-events 属性用于设置元素是否对鼠标事件做出反应。
  • 值:none 不做反应auto 默认值
  1. 利用动画animation,去改变当前按钮是否可点击
  2. 利用伪类 :active 触发按钮时机,就是点击行为

作用:实现按钮节流,利用css动画的控制,比如一个动画控制按钮从禁用-》可点击的变化,每次点击都让动画重新执行一次,就能达到节流的效果

实现方式:

首先利用animation写一个禁用开启的动画

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

其次:把动画绑定到按钮上(设置延迟3s)

button {
     animation: cssThrottle 3s step-end forwards;
}

animation的 相关属性

  • step-end=》 steps(1, end)

  • step-start =》 steps(1, start)
    step() 表示过度的情况
    比如steps(5, end),表示把我们的动画分成了多少等分end表示从开始的时候就执行,最后那段被忽视,start则相反
    在这里插入图片描述
    在这里插入图片描述

  • forwards end时表示最后那一段就交给forwards处理,就是第五段

二、利用监听css的 transition 达到节流效果

通过:active去触发transition变化,然后通过监听transition回调去动态设置按钮的禁用状态

button{
  opacity: .99;
  transition: opacity 2s;
}
button:not(:disabled):active{ 
  opacity: 1;
  transition: 0s;
 }

然后监听transition的起始回调

// 过渡开始
document.addEventListener('transitionstart', function(ev){
   ev.target.disabled = true
})
// 过渡结束
document.addEventListener('transitionend', function(ev){
   ev.target.disabled = false 
})

注意:这两种的话,安全性不高,可以通过 ui层面去绕开

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8813.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

k-form-design 改成自己组件步骤

1)修改package.json {"name": "kk-form-design","version": "1.0.2","private": false,"description": "基于vue、ant-design-vue的表单设计器,可视化开发表单","license": &quo…

Linux下的截图工具 —— Flameshot

一、简介 Flameshot是一款功能强大但易于使用的屏幕截图软件,中文名称火焰截图。Flameshot 简单易用并有一个CLI版本,所以你也可以从命令行来进行截图。Flameshot 是一个Linux发行版中完全免费且开源的截图工具。 特性: 外观可定制化。易于…

数据结构-红黑树

红黑树 二分查找 二叉树 二叉平衡树 平衡因子不超1 查找和二叉查找一样的 删除和插入比较复杂 四种失去平衡的方法 LR 两步 RL 两步 不断旋转比较耗时 进一步改进: 红黑树RBT 调整的次数少 平衡性不如二叉平衡树 , 插入删除频繁的使用红黑树&…

redis的主从复制,哨兵和cluster集群

一、redis性能管理 (1) redis-cli 127.0.0.1:6379> info memory ​ (2) redis-cli info memory used_memory_rss:是Redis向操作系统申请的内存。used_memory:是Redis中的数据占用的内存。used_memo…

新手零基础自学Python,安装并配置环境+教程

第一步:搭建python运行环境 在 Windows 上安装 Python 和安装普通软件一样简单,下载安装包以后猛击“下一步”即可。 Python 安装包下载地址:https://www.python.org/downloads/ 打开该链接,可以看到有两个版本的 Python&#…

java框架 —— Spring

Spring[TOC](Spring)1、概述1.1、优点1.2、组成2. IOC概述2.1 什么是IOC2.1.1 推导过程2.1.2 IOC本质2.2 HelloSpring2.2.1 导入Jar包2.2.2 编写代码2.2.2 思考2.3 IOC过程2.4 IOC 接口3. Bean 管理3.1 基于xml方式——set方法注入3.2 FactoryBean3.3 bean 作用域3.4 bean 生命…

Java——面向对象进阶(封装、继承、多态)

Java面向对象三大特性——封装、继承、多态一、封装1.封装基本概念2.访问修饰符3.Java中封装的理解4.封装的优点二、继承1.为什么需要继承2.继承层次结构3.super和this关键字4.继承语法与设计一个继承体系三、多态1.多态的概念2.多态的实现条件3.多态的优缺点一、封装 1.封装基…

【微服务架构组件】Nacos

初识nacos 最近在整合nacos做配置的热下发,总结下。 Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 阿里开源产品:什么是 Nacos 如 Na…

[Leetcode]138. 复制带随机指针的链表

目录 1.题目链接 2.1解法①(暴力) 2.1.1解法思路: 2.1.2代码实现: 2.2解法②(进阶) 2.1.1解法思路: 2.2.2代码实现: 1.题目链接 138. 复制带随机指针的链表 - 力扣(LeetCode) 2.1解法①(暴力) 2.1.…

软考 - 操作系统

操作系统概述 bit和byte区别 bit 位 说白了就是0或者1;计算机内存中的存储都是01这两个东西。 byte(B) 字节 1byte8bit(一字节 8比特) 1byte就是1B 1byte 存1个英文字母,2个byte存一个汉字。 了解 操作系统的作用&#xff1…

SpringBoot使用EasyExcel类一键导出数据库数据生成Excel,导入Excle生成List<>数据(作者直接给demo项目)

文章目录一、简单一键导出Excel直接给出生成效果Empty&#xff0c;这个很关键controller层EasyExcel类的多种使用方式二、导入Excel生成List<>数据controller层&#xff0c;简单写法监听器写法&#xff08;观察者模式&#xff09;&#xff0c;稍微麻烦其他如果要使类中的…

动态拼接 merge 语句

【问题】 Hello everyone, I have one query, would be great if anyone can help me out on this. In SQL, I have two tables with same column names. Want to query if there is any difference in the column values and if yes will update the values(in the first ta…

LEADTOOLS 入门教程: 使用 AWS Lambda 转换文档 - C# .NET Core

LEADTOOLS 是一个综合工具包的集合&#xff0c;用于将识别、文档、医疗、成像和多媒体技术整合到桌面、服务器、平板电脑、网络和移动解决方案中&#xff0c;是一项企业级文档自动化解决方案&#xff0c;有捕捉&#xff0c;OCR&#xff0c;OMR&#xff0c;表单识别和处理&#…

SSM框架真没那么难,这份阿里大佬的进阶实战笔记真给讲透了!

SSM框架&#xff1a; SSM框架是spring MVC &#xff0c;spring和mybatis框架的整合&#xff0c;是标准的MVC模式&#xff0c;将整个系统划分为表现层&#xff0c;controller层&#xff0c;service层&#xff0c;DAO层四层 使用spring MVC负责请求的转发和视图管理 spring实现…

Docker学习笔记

1.docker比vm快的原因: docker有着比虚拟机更少的抽象层,不需要实现硬件资源的虚拟化运行,运行在docker上的程序使用的都是物理机的资源. dicker利用的是宿主机的内核,不需要加载操作系统的os内核. 2.docker帮助文档docker help 具体到某一个命令是使用 docker run --help即可…

【JMeter】Jmeter分布式压测教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录一、原理二、环境搭建2.1 环境准备2.2 slave机器配置2.3 master机器配置三、脚本及执行3.1 参数化问题3.2 GUI启动测试3.3 命令行启动测试总结一、原理 Jmeter分布式…

【深入理解Kotlin协程】CoroutineScope.launch源码追踪扒皮

lifecycleScope、viewModelScope、GlobalScope、MainScope的上下文 协程最重要的就是协程上下文对象&#xff0c;因为通过上下文可以获取到协程相关的任何东西(Job、Dispatcher、Interceptor、Name、ExceptionHandler)&#xff0c;所以有必要了解清楚常用的协程作用域对象中cor…

asp.net+sqlserver汽车4s店销售网站系统c#项目

数据项 管理员信息表&#xff5b;用户编号&#xff0c;用户名称&#xff0c;用户密码&#xff5d; 新闻信息表&#xff5b;编号&#xff0c;标题&#xff0c;内容&#xff0c;添加时间&#xff5d; 汽车信息表&#xff5b;编号&#xff0c;汽车名称&#xff0c;汽车价格&#x…

制造业行业现状及智能生产管理系统一体化解决方案

前言&#xff1a; 《中国制造2025》作为我国实施制造强国战略第一个十年的行动纲领。它重点提出了坚持&#xff1a;创新驱动、质量为先、绿色发展、结构优化、人才为本的基本方针。坚持&#xff1a;市场主导、政策引导&#xff0c;立足当前、着眼长远&#xff0c;整体推进、重…

Selenium实现原理

Selenium 是目前主流的用于Web应用程序测试的工具&#xff0c;可以直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。 selenium的实现原理是这样的&#xff1a; 1.运行代码&#xff0c;启动浏览器后&#xff0c;webdriver会将浏览器绑定到特定端口&#xff0c;作为we…