【学习笔记】借助CSS来做定时器

此文学习对象:

还在用定时器吗?借助 CSS 来监听事件》作者: XboxYan,微信公众号:前端侦探

setTimeout平替:transition和transitionend

基本原理

定时器的组成条件:定时+触发

css正好有个和这俩都有关的属性:transition和它的监听事件 transitionend 

- transition:过渡动效(如果不想让用户发现,可以做不明显的动效)

- transitionend:transition+end,过渡动效完成时触发;如果动效在完成前就被移除,就不会触发事件(比如删除 transition-property 或者将 display 设置为 none)。

总结:触发元素的动效,几秒后就可以触发事件 =定时器

其他事件:transitionrun 动效创建时transitionstart 动效实际开始时transitioncancel 动效取消时

触发时机

- hover:鼠标悬停超过几秒触发

- active:鼠标按下几秒后触发 =长按

- focus:鼠标点击后,再过几秒触发 =延迟触发(有个小bug,按钮保持focus,每次页面切换都会重复触发,所以事件触发后要移除 transition-property )

最简单的栗子

代码里的focus换成hover、active都可以触发

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
  <button id="timer">延时器 hover</button>
</body>
<style>
  button{
    opacity:1;
  }
  button:focus{
    opacity:0.99;
    transition: opacity 1s;
  }
</style>
<script>
  const btn = document.getElementById('timer')
  btn.addEventListener('transitionend',()=>{
    console.log('触发事件')
  })
</script>
</html>

栗子:鼠标悬停2秒后弹框提示

公众号里提供了一个栗子:鼠标悬停2秒后弹框提示

大佬还提供了运行链接:https://codepen.io/xboxyan/pen/ExLgXrwhover_alert (codepen.io): https://codepen.io/xboxyan/pen/ExLgXrwhttps://codepen.io/xboxyan/pen/ExLgXrw

悬停2秒日常中很少见,但可以改成 协议长按两秒确认

栗子:长按选中

长按框选 (codepen.io): https://codepen.io/xboxyan/pen/gJdzoN

这个栗子里还是用了很多js

浏览器兼容性

"transitionend " | Can I use... Support tables for HTML5, CSS3, etc

setInterval的平替:animation和animationiteration

 基本原理

- animation:动画

- animationiteration:animation + iteration,动画运动到最后一帧

其他事件:animationstart 动画开始animationend 动画结束时animationcancel 动画中断时

最简单的栗子

还没写完栗子,下回再听我解释

栗子:轮播和暂停

公众号的栗子:图片轮播和暂停:https://codepen.io/xboxyan/pen/jOxMwXW

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值