广告位联系
返回顶部
分享到

css动画实现节流的代码

css 来源:互联网 作者:秩名 发布时间:2023-02-20 22:16:01 人浏览
摘要

1、节流原理 如果持续触发事件,每隔一段时间只执行一次函数。意思就是针对调用频率高的函数,通过设置延时,使其在执行后间隔一段时间,才允许进行下一次的函数运行,避免重

1、节流原理

如果持续触发事件,每隔一段时间只执行一次函数。意思就是针对调用频率高的函数,通过设置延时,使其在执行后间隔一段时间,才允许进行下一次的函数运行,避免重复频繁的调用导致的浏览器性能以及ajax重复调用问题。之前基本上是使用JavaScript节流函数去控制,实际上css也能做到节流。以下将以按钮的点击事件来举例。

2、css 实现思路

(需要用到 pointer-events、animation以及:active) 对点击事件进行限制:通过CSS pointer-events 属性,点击一次之后一定时间内禁用触发点击事件;

  • pointer-events 属性用于设置元素是否对鼠标事件做出反应。
  • css语法:pointer-events: auto|none;
  • 设置禁止时间:通过animation
  • 设置动画时间(点击事件禁用时间)
  • 触发时机:通过伪类:active触发animation的动画

可以理解成是对 CSS 动画的进行控制,比如有一个动画控制按钮从禁用->可点击的变化,每次点击时让这个动画重新执行一遍,在执行的过程中,一直处于禁用状态,借此达到“节流”的效果。

3、实现代码

在button按钮上绑定点击事件

1

2

3

4

5

<button @click="buttonClick">保存</button>

  

buttonClick() {

    console.log("节流-----保存");

},

设置css  animation动画效果,并绑定到button上

1

2

3

4

5

6

7

8

9

10

11

@keyframes throttle {

  from {

    pointer-events: none;

  }

  to {

    pointer-events: all;

  }

}

button {

  animation: throttle 2s step-end forwards;

}

注意:这里动画的缓动函数设置成了阶梯曲线 step-end,step-end 会使 keyframes 动画到了定义的关键帧处直接突变,并没有变化的过程,用来达到 pointer-events 的明显变化时间点。

pointer-events在0~2秒内的值都是none,一旦到达2秒,就立刻变成了all,由于是forwards,会一直保持all的状态。

在点击时重新执行一遍动画,只需要在按下时设置动画为none就行了

1

2

3

button:active{

  animation: none;

}

为了更直观的看到节流效果,可以把颜色变化也加在动画里

1

2

3

4

5

6

7

8

9

10

@keyframes throttle {

  from {

    color: red;

    pointer-events: none;

  }

  to {

    color: green;

    pointer-events: all;

  }

}

4、借助 CSS 来监听事件

webkit-animation动画有三个事件:

  • 开始事件: webkitAnimationStart
  • 结束事件: webkitAnimationEnd
  • 重复运动事件: webkitAnimationIteration

1

2

3

4

5

6

7

8

9

10

11

12

13

var o = document.getElementById("div1");

// 动画开始时事件

o.addEventListener("webkitAnimationStart", function() {

    console.log("动画开始");

})

// 动画重复运动时事件

o.addEventListener("webkitAnimationIteration", function() {

    console.log("动画重复运动");

})

// 动画结束时事件

o.addEventListener("webkitAnimationEnd", function() {

    console.log("动画结束");

})

在本示例中,可以通过:active去触发transition变化,然后通过监听transition回调去动态设置按钮的禁用状态,实现如下

1

2

<button onclick="console.log('保存1')">测试click</button>

<button class="throttle" onclick="console.log('保存2')">节流----css</button>

1

2

3

4

5

6

7

8

9

10

11

button {

  user-select: none;

}

.throttle {

  opacity: 0.99;

  transition: opacity 2s;

}

.throttle:not(:disabled):active {

  opacity: 1;

  transition: 0s;

}

然后监听transition的起始回调

1

2

3

4

5

6

document.addEventListener("transitionstart", function (ev) {

    ev.target.disabled = true;

});

document.addEventListener("transitionend", function (ev) {

    ev.target.disabled = false;

});

这样做的最大好处是,这部分禁用的逻辑是完全和业务逻辑是解耦的,可以在任意时候,任意场合下无缝接入,也不受框架和环境影响。

5、总结

以上通过 CSS 的思路实现了类似“节流”的功能,相比 JS 实现而言,实现更精简、使用更简单,没有框架限制,下面一起总结一下实现要点:

  • 函数节流是一个非常常见的优化方式,可以有效避免函数过于频繁的执行;
  • CSS 的实现思路和 JS 不同,重点在于在于找到和该场景相关联的属性;
  • CSS 实现“节流”其实就是对一个动画的进行精准控制;
  • 还可以通过 transition 属性的回调函数动态设置按钮禁用态;
  • 这种实现的好处在于禁用逻辑和业务逻辑是完全解耦的。

版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 纯CSS实现了下划线的交互动画效果

    纯CSS实现了下划线的交互动画效果
    最近看到了一个特别炫酷的网站上的一个小细节,下划线的动画。看下他的实现效果。 但是,假如我们左边并没有足够的空间存放一条不可
  • css动画实现节流的代码
    1、节流原理 如果持续触发事件,每隔一段时间只执行一次函数。意思就是针对调用频率高的函数,通过设置延时,使其在执行后间隔一段时
  • 五个惊艳一时的CSS属性的介绍(不常用但很有用

    五个惊艳一时的CSS属性的介绍(不常用但很有用
    随着前端的不断发展,更多新的CSS属性不断加入提案,本文列举 5 个不常用但很有用且你见过也可能没见过的CSS属性,带大家领略CSS之美。
  • 基于CSS实现元素融合效果

    基于CSS实现元素融合效果
    实现效果 完整源码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
  • 纯CSS实现loading加载中效果(多种展现形式)

    纯CSS实现loading加载中效果(多种展现形式)
    前言 现如今网页越来越趋近于动画,相信大家平时浏览网页或多或少都能看到一些动画效果,今天我们来做一个有意思的动画效果,纯css实
  • html+css设计两个摆动的大灯笼

    html+css设计两个摆动的大灯笼
    新年马上就要到了,教大家用html+css设计两个大灯笼,喜气洋洋。 html代码: html代码部分非常简单,将一个灯笼分成几部分进行设计,灯笼
  • CSS-@规则(At-rules)常用语法使用总结
    At-rules规则是目前CSS中一种常见的语法规则,它使用一个@符号加一个关键词定义,后面跟上语法区块,如果没有则以分号结束即可。 这种规
  • css实现简易报警灯的代码

    css实现简易报警灯的代码
    实现效果 实现思路 实现的核心是一个灯罩和一个灯芯。灯罩主要是使用了border-radius圆角边框,灯芯主要是radial-gradient径向渐变。再使用动
  • CSS3使用双旋转实现福到了的迎春喜庆特效代码

    CSS3使用双旋转实现福到了的迎春喜庆特效代码
    春节快到了,因为疫情已经好久没有回老家了,今年终于可以回家过年了,我已经抑制不住自己激动的心情了。因此,我利用css3的旋转做了
  • 三分钟学会使用css雪碧图

    三分钟学会使用css雪碧图
    一. 先分析一下名字(有没有人跟我一开始一样疑惑为啥叫这名) Sprite 英文小精灵的意思,Sprite又叫小精灵图,恰好呢某绿瓶气泡水名也叫
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计