首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >requestAnimationFrame动画循环

requestAnimationFrame动画循环
EN

Stack Overflow用户
提问于 2017-02-28 10:33:11
回答 2查看 895关注 0票数 0

我有以下代码片段:

代码语言:javascript
复制
function animate()
{
testdiv.style.transitionDuration="2500ms"
testdiv.style.transitionTimingFunction="linear"
testdiv.style.transform="rotate(45deg)"
window.requestAnimationFrame(animate)
}
window.requestAnimationFrame(animate)

这旋转45度,并正在工作。

如何将其转换为无限的动画循环,以便动画自动重新启动(从0度开始)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-28 10:44:59

对当前代码或要更改的代码使用requestAnimationFrame都是没有意义的。

对于当前代码,您将设置一个样式,然后让CSS接管。过了一段时间以后,没有必要做任何事情。

若要将其更改为重置并重复循环,您希望在动画完成时触发新代码,而不是在浏览器准备呈现新框架时触发。为此,侦听transitionend事件,然后删除transform值,将其设置为默认值。

代码语言:javascript
复制
var testdiv = document.querySelector("div");
testdiv.addEventListener("transitionend", animate);
setTimeout(animate, 100);

function animate() {
    if (testdiv.style.transform) {
        testdiv.style.transform = "";
    } else {
        testdiv.style.transform = "rotate(45deg)";
    }
}
代码语言:javascript
复制
body {
  padding: 100px;
}

div {
  transition-Duration: 2500ms;
  transition-Timing-Function: linear;
}
代码语言:javascript
复制
<div>....</div>

票数 0
EN

Stack Overflow用户

发布于 2017-02-28 10:36:16

嗨,试试下面的代码。

代码语言:javascript
复制
var FPS = 24;   //Frame per second. 
var prevTime,curTime;

function animate()
{
  curTime = new Date();
  if(prevTime === undefined || (curTime - prevTime) >= 1000/FPS)
  {
     testdiv.style.transitionDuration="2500ms"
     testdiv.style.transitionTimingFunction="linear"
     testdiv.style.transform="rotate(45deg)"

     prevTime = curTime;
  }

  window.requestAnimationFrame(animate);

}

window.requestAnimationFrame(animate)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42506345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档