【问题标题】:JS Get Current Position of Animated ElementJS 获取动画元素的当前位置
【发布时间】:2015-11-03 03:17:38
【问题描述】:

所以我有一个使用 CSS3 过渡在页面上移动的元素。我正在尝试查看页面上该动画的实际输出 FPS 是如何(例如,如果页面以 5FPS 输出,则 div 以 1s 的过渡值从 0px 移动到 10px 应该报告 2px、4px、 6px 等)。

相反,我只是得到我已经将 div 的位置设置为的任何值。

// css has defined a transition of 10s on the moving div
document.getElementById("movingDiv").style.left = "0px";
console.log(document.getElementById("movingDiv").style.left); //outputs 0px
document.getElementById("movingDiv").style.left = "100px";
window.setTimeout(function(){
    console.log(document.getElementById("movingDiv").style.left); //outputs 100px instead of, for instance, 43px or wherever the div would visually appear to be
}, 3000);

这不是确切的代码,只是一些足以说明我的观点的通用代码。

重申问题,我如何找到元素在一个位置和另一个位置之间的转换过程中视觉上的位置我使用 jQuery 动画的次数并不多其他人已经回答了,并且不只是想计算元素应该在哪里。我想看看元素实际上出现在页面上的什么位置。我也想这是否也适用于屏幕外(如可见窗口的左侧或上方)。

为了帮助了解我实际尝试这样做的原因,是我尝试获取页面的 FPS 输出。我见过很多页面输出糟糕的 FPS 但 Javascript 仍然输出超过 100 FPS 的情况,因为 Javascript 的运行速度比页面本身的渲染速度要快,我试图避免。

【问题讨论】:

    标签: javascript html css transition frame-rate


    【解决方案1】:

    你可以使用 window.requestAnimationFrame:

      var moving = false,
          el = document.getElementById("mover");
      el.className = el.className + " move-right";
      el.addEventListener('transitionend', function () {
        moving = true;
      });
    
      function getPosition() {
        var rect = el.getBoundingClientRect()
        console.log(rect.top, rect.left);
        if (!moving) {
          window.requestAnimationFrame(getPosition);
        }
      }
      window.requestAnimationFrame(getPosition);
    

    http://jsfiddle.net/ob7kgmbk/1/

    【讨论】:

    • +1 用于快速回答和参考 AMAZING 函数(希望我能 +10),但是因为我要求一个不使用 jQuery 的函数(试图让我的项目完全基于它自己的代码,以及其他可能也在寻找它的人),我认为我不能从技术上算出它的答案。但是,非常感谢,在研究了这个 requestAnimationFrame 之后,我发现我可以将它用于我多年来一直试图弄清楚的 FPS 计数。不要太用力,但如果你或任何人很快回答没有注意到:"I'm not using jQuery animations as many others have answered for"
    • 我将替换 jQuery 部分
    • Welp,这看起来像是答案!暂时无法测试,因为时间短,但标记已回答!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2016-05-08
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多