当前位置: 首页 > article >正文

节流还在用JS吗?CSS也可以实现哦

函数节流是一个我们在项目开发中常用的优化手段,可以有效避免函数过于频繁的执行。一般函数节流用在scroll页面滚动,鼠标移动等。

为什么需要节流呢,因为触发一次事件就会执行一次事件,这样就形成了大量操作dom,会出现卡顿的情况。

一、传统JS节流实现方式

   /* 1.时间戳实现 */
    function throttle(func, delay) {
      let prev = 0
      return function(...args){
        let now = new Date()
        if(now - prev > delay){
          prev = new Date()
          func.apply(this, args)
        }
      }
    }

    /* 定时器实现 */
    function throttle(func, delay) {
      let timer = null
      return function(...args) {
        if(!timer){
          timer = setTimeout(() => {
            timer = null
            func.apply(this, args)
          },delay)
        }
      }
    }

二、CSS实现
1.实现思路

我们可以使用css的pointer-events禁用点击事件对事件进行控制。
使用animation设置禁用时间,对时间进行限制。
使用:active点击行为作为触发时机

可以这样理解,一个CSS动画从禁用可点击的变化,每次点击时让这个动画重新执行一遍,在整个执行过程设置的时间范围内一直处于禁用的状态,这是不是就有点像节流的功能。

2.具体实现
假设一个按钮,连续点击按钮就会一直触发事件。

<button onclick="console.log('111')">点击按钮</button>

在这里插入图片描述
使用pointer-events实现一个动画,从禁用到可点击。

 @keyframes throttle {
    from {
      color: green;
      pointer-events: none;
    }
    to {
      color: black;
      pointer-events: all;
    }
  }
  button {
    animation: throttle 3s step-end forwards;
  }
  button:active {
    animation: none;
  }

在这里插入图片描述


http://www.kler.cn/a/1192.html

相关文章:

  • JAVA并发编程(2)——(如何保证原子性,原子类,CAS乐观锁,JUC常用类)
  • 176万,GPT-4发布了,如何查看OpenAI的下载量?
  • 面试官:聊聊你知道的跨域解决方案
  • Linux 路由表说明
  • 剑指 Offer II 031. 最近最少使用缓存
  • Linux:函数指针做函数参数
  • 介绍两款红队常用的信息收集组合工具
  • 【CSS 知识总结】第二篇 - HTML 扩展简介
  • OKHttp 源码解析(二)拦截器
  • 中断控制器
  • 面试官问 : ArrayList 不是线程安全的,为什么 ?(看完这篇,以后反问面试官)
  • 信创办公–基于WPS的PPT最佳实践系列(表格和图标常用动画)
  • 每日算法题
  • Unity学习日记12(导航走路相关、动作完成度返回参数)
  • yolo车牌识别、车辆识别、行人识别、车距识别源码(包含单目双目)
  • Webpack迁移Rspack速攻实战教程(前瞻版)
  • 【OpenCV】车牌自动识别算法的设计与实现
  • Web自动化——前端基础知识(二)
  • redis在window上安装与自启动
  • HTML中如何键入空格