javascript - requestAnimationFrame 没有触发提供给它的函数

标签 javascript html requestanimationframe

我使用setInterval实现了无限循环动画。我现在想将实现更改为 requestAnimationFrame() ,以便获得我所追求的性能。由于某些原因, requestAnimationFrame() 不会调用提供给它的函数。

我的代码如下所示;

var index = 0;
var $btn = $('.btn');
function btnBlinkRun() {
  if (index < 2) {
    index = index + 1;
  } else {
    index = 0;
  }
  $('#ani--scaleinout').removeAttr('id');
  $($btn[index]).attr('id', 'ani--scaleinout');
  window.requestAnimationFrame(btnBlinkRun);
}

btnBlinkRun();
.btn{
  width: 30px;
  height: 30px;
  
  background: blue;
  border-radius: 100%;
  margin-bottom: 10px;
}

#ani--scaleinout {
  animation: zoominout 1s ease-in;
}

@keyframes zoominout {
    50% {
        transform: scale(1.4);
    }
    100% {
        transform: scale(1);
    }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
  
  <div class="btn" id="ani--scaleinout"></div>
    <div class="btn"></div>

    <div class="btn"></div>

  
</div>

最佳答案

看起来发生的事情是您每秒多次触发 requestAnimationFrame 。您的 CSS 动画的持续时间为 1s。但是您每隔 x 毫秒就会删除该属性。

它正在触发,只是发生得太快,你看不到它。为了演示更改对 window.requestAnimationFrame 的调用以使用 setTimeout,您会注意到动画:

setTimeout(function() {
    window.requestAnimationFrame(btnBlinkRun);
}, 1000);

并不是说这是首选解决方案,而是解释为什么会发生这种情况。

关于javascript - requestAnimationFrame 没有触发提供给它的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49455678/

相关文章:

c# - jquery datepicker 没有弹出?

javascript - 在 Safari 上退出全屏切换空间时 RequestAnimationFrame 不工作

javascript - 格式化问题 : DropDown of checkboxes

javascript - 替换文本节点时,不安全的 JavaScript 尝试访问 Chrome 中的框架错误

javascript - 测试一个函数,该函数对所有可能的情况采用 3 个整数

javascript - 通过 Javascript 检测移动设备

html - 如何使用 bootstrap 4 使 textarea 元素填充所有高度?

html - ul 的子元素的组合宽度等于它们的总和

javascript - 如何使用 requestAnimationFrame 循环播放多个方 block 的动画

javascript - 如何使用 requestAnimationFrame 传递参数?