Javascript requestAnimationFrame()似乎并不总是重新绘制新应用的css变换

Javascript requestAnimationFrame()似乎并不总是重新绘制新应用的css变换,javascript,html,css,performance,rendering,Javascript,Html,Css,Performance,Rendering,如果有人能帮助我,我将不胜感激。我正在使用requestAnimationFrame()对带有CSS的元素应用垂直平移,我希望垂直平移距离与垂直滚动位置相关。我的问题是,在使用滚轮时,似乎有些帧或者不调用我的函数,或者不使用更新的CSS重新绘制(使用Chrome和Firefox进行测试,两者都是最新的) 这是一个精简版(已删除优化),以显示我尝试执行的操作的根源: let sticky = document.getElementById('top'); function changePos()

如果有人能帮助我,我将不胜感激。我正在使用
requestAnimationFrame()
对带有CSS的元素应用垂直平移,我希望垂直平移距离与垂直滚动位置相关。我的问题是,在使用滚轮时,似乎有些帧或者不调用我的函数,或者不使用更新的CSS重新绘制(使用Chrome和Firefox进行测试,两者都是最新的)

这是一个精简版(已删除优化),以显示我尝试执行的操作的根源:

let sticky = document.getElementById('top');

function changePos() {
    let position = window.scrollY;
    sticky.style.transform = `translateY(${position}px)`;
    window.requestAnimationFrame(changePos);
}

window.requestAnimationFrame(changePos);
您可以在上看到完整的工作演示。出于某种原因,单击并拖动滚动条不会错过任何帧,但使用鼠标滚轮会错过任何帧。您可能必须使用开发工具来限制CPU以查看丢失的帧,或者使用较旧的计算机或电话


非常感谢。

“此代码笔”不显示任何内容,除非您登录。。。不,谢谢。。。更好的浏览器是否也会像你描述的那样运行?@JaromandaX-谢谢。重新连接到我自己的服务器,并更改到该服务器的链接。您可以在Chrome、Firefox和Chrome for Mobile上看到这些行为。您可能必须使用开发工具或使用较旧的计算机/设备来调节CPU。