我有这个怪异的问题,我要增加1,但是当javascript窗口弹出时出现的增加表明我已经增加了9或13,这要么取决于我是否要增加1或-1。这是怎么回事?

此函数由requestAnimationFrame调用

function stream1() {
  if (y > origin_y){
    var xOffset = -1;
  } else if (y == origin_y){
    var xOffset = 1;
  } else {
    var xOffset = 1;
  }

  var offset = $( "#widget1" ).offset();
  var x = offset.left;
  var y = offset.top;
  console.log(' X - '+x+' Y - '+y);
  $( "#widget1" ).offset({ top: y-yOffset, left: xInitial+xOffset });
}


这是动画帧

var globalID;
function repeatOften() {
  stream1();
  requestAnimationFrame(repeatOften);
}


在警报消失并再次出现时,已经完成了9次迭代,对吗?应该是每秒60次,大约是1秒,所以不是60,而不是9或13吗?我不知道这些任意数字来自何处。

再次总结一下,最初的xInitial位于1114 px,然后到达1105或1103,然后每次都有9或13个间隙,那为什么呢?

最佳答案

首先,避免在帧回调中进行昂贵的操作。就像$( "#widget1" ).offset()。请注意,这是DOM操作,可能会很慢并且破坏所有计时。您可以在动画开始之前获取DOM ID和偏移量,然后记住当前的偏移量左上角。

其次,如果要超精确,则可以使用处理程序urgument(时间戳),如果存储动画开始时间戳,则可以计算精确位置,而与实际帧率无关。

关于javascript - requestAnimationFrame javascript警报增量从1跳到9或13,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28617549/

10-12 13:06