Jquery 是否可以提高.scroll事件中.css方法的速度?
这是我的代码:Jquery 是否可以提高.scroll事件中.css方法的速度?,jquery,performance,Jquery,Performance,这是我的代码: $( window ).scroll( function () { scrollBG( '#about' ); } function scrollBG( e ) { bg_position = $( document ).scrollTop() / 2; $( e ).css( 'background-position-y', bg_position ); } 它所做的是在用户滚动时滚动元素的背景。 这很好,唯一的问题是当使用鼠标滚轮滚动时,css需要几毫秒才
$( window ).scroll( function () {
scrollBG( '#about' );
}
function scrollBG( e ) {
bg_position = $( document ).scrollTop() / 2;
$( e ).css( 'background-position-y', bg_position );
}
它所做的是在用户滚动时滚动元素的背景。
这很好,唯一的问题是当使用鼠标滚轮滚动时,css需要几毫秒才能跟上(因为鼠标滚轮一次移动100像素)
有没有办法使css的更改瞬间发生?
也许本地JavaScript更快
我注意到这个插件没有我所面临的问题,但我不想使用它,因为它似乎过度满足了我的需要:一些想法:
- 在元素上有其他css规则需要维护吗?如果不直接设置样式属性,则可能会更快
- 正如Kevin B在评论中所建议的,您可以延迟背景的实际移动,并可能设置位置移动的动画,以减少移动时的震动
第二,最好尽可能使用requestAnimationFrame,而不是jQuery$(window).scroll方法。您可以使用节流阀和可能的增量检查来避免每次移动时更改css,而不是在滚动位置每x ms和/或每z更改一次。我尝试了.style方法,但没有区别。关于延迟css更改,我不能这样做-更改需要在完全相同的时间发生。只需将元素的后台附件属性设置为fixed就可以了!使用鼠标滚轮滚动时不再紧张。:)我想知道为什么?我的函数以完全相同的方式工作。。无论如何,这是因为当后台附件未设置为“固定”时,浏览器会重新计算(并应用)其位置,然后应用新位置,由js重新计算。