利用css 动画实现节流

节流指的避免过于频繁的执行一个函数,例如:一个保存按钮,为了避免重复提交或者服务器考虑,往往需要对点击行为做一定的限制,不然会频繁的请求接口,之前基本上是通过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层面去绕开

觉得可以点个赞呗。。。
如有什么问题,欢迎评论区留言,感谢各位大佬指点

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSS动画实现旋转木马可以通过CSS3中的transform属性以及transition属性来实现。具体步骤如下: 1. 创建一个包含多个子元素的容器,每个子元素代表旋转木马中的一个板块。 2. 使用CSS3中的transform属性对容器进行旋转、平移等操作,使其形成旋转木马的效果。 3. 使用transition属性对容器进行过渡效果的设置,使其能够平滑地旋转。 4. 对每个子元素进行定位,并设置其旋转角度和z-index值,使其在旋转时呈现出正确的位置和层次关系。 5. 可以通过JavaScript来控制容器的旋转速度和方向,以及点击子元素时的响应事件等。 以下是一个简单的CSS动画实现旋转木马的示例代码: ```html <div class="carousel"> <div class="item item1"></div> <div class="item item2"></div> <div class="item item3"></div> <div class="item item4"></div> <div class="item item5"></div> </div> ``` ```css .carousel { position: relative; width: 500px; height: 300px; margin: 0 auto; perspective: 1000px; } .item { position: absolute; top: 0; left: 0; width: 100%; height: 100%; transform-style: preserve-3d; transition: transform 1s ease-in-out; } .item1 { transform: rotateY(0deg) translateZ(250px); } .item2 { transform: rotateY(72deg) translateZ(250px); } .item3 { transform: rotateY(144deg) translateZ(250px); } .item4 { transform: rotateY(216deg) translateZ(250px); } .item5 { transform: rotateY(288deg) translateZ(250px); } .carousel:hover .item { transform: rotateY(-60deg); } .item:hover { transform: translateZ(300px); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值