Open chenyinkai opened 6 years ago
逛论坛的时候看到一个问题, js是怎么实现持续的动画效果的? 第一时间想到的是定时器, 后来看到有同学提到了 requestAnimationFrame, 由于之前没有对相关方法有所了解, 于是便去查了下, 顺便也记录了下 animation 的使用.
js
requestAnimationFrame
animation
猛戳这里查看兼容性
jsfiddle预览
.box { width: 200px; height: 200px; background-color: aqua; position: absolute; left: 0; top: 0; animation: test 3s linear 2s infinite; } @keyframes test { from { } to { width: 50px; height: 50px; background-color: red; opacity: 0.5; left: 500px; top: 500px; } }
<div class="box"></div>
优势:
使用:
持续调用 requestAnimFrame 即可 可以使用 cancelAnimationFrame 清除动画
持续调用 requestAnimFrame 即可
requestAnimFrame
可以使用 cancelAnimationFrame 清除动画
cancelAnimationFrame
#anim { position: absolute; left: 0px; width: 150px; height: 150px; line-height: 150px; background: aqua; color: white; border-radius: 10px; padding: 1em; }
<div id="anim"> Click here to start animation</div>
// 兼容性处理 window.requestAnimFrame = (function() { return ( window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(callback, element) { window.setTimeout(callback, 1000 / 60) } ) })() var elem = document.getElementById('anim') var startTime = undefined function render(time) { time = Date.now() if (startTime === undefined) { startTime = time } elem.style.left = ((time - startTime) / 10) % 300 + 'px' elem.style.top = ((time - startTime) / 10) % 300 + 'px' elem.style.borderRadius = ((time - startTime) / 10) % 300 + 'px' elem.style.opacity = Math.floor((time - startTime / 100)) % 2 === 0 ? 1 : 0.3 } elem.onclick = function() { (function animloop() { render() requestAnimFrame(animloop, elem) })() }
requestAnimationFrame MDN
requestanimationframe
animation MDN
CSS 和 JS 实现持续的动画效果
逛论坛的时候看到一个问题,
js
是怎么实现持续的动画效果的? 第一时间想到的是定时器, 后来看到有同学提到了requestAnimationFrame
, 由于之前没有对相关方法有所了解, 于是便去查了下, 顺便也记录了下animation
的使用.animation(CSS)
兼容性与属性
实例
jsfiddle预览
requestAnimationFrame(JS)
兼容性与基本概念
优势:
使用:
举例
jsfiddle预览
参考
requestAnimationFrame MDN
requestanimationframe
animation MDN