如果没有更改,jQuery是否会在.css()调用上重新绘制页面?
所以,就页面速度而言,我们都知道,操纵页面会迫使它重新绘制,这对浏览器来说是一种负担。如果我有一个应用了css的div:如果没有更改,jQuery是否会在.css()调用上重新绘制页面?,jquery,html,css,Jquery,Html,Css,所以,就页面速度而言,我们都知道,操纵页面会迫使它重新绘制,这对浏览器来说是一种负担。如果我有一个应用了css的div: div{ position: static; } 并将其更改为 div{ position: fixed; } 它将刷新页面并更改布局。但是,我的问题是,如果div已经对其应用了修复,并且我执行了 jQuery('div').css('position', 'fixed'); 它会导致重新绘制,还是会看到它已经设置好并沿着它的快乐之路前进 谢谢你的帮助
div{
position: static;
}
并将其更改为
div{
position: fixed;
}
它将刷新页面并更改布局。但是,我的问题是,如果div已经对其应用了修复,并且我执行了
jQuery('div').css('position', 'fixed');
它会导致重新绘制,还是会看到它已经设置好并沿着它的快乐之路前进
谢谢你的帮助 不应该,但这是一种浏览器行为,而不是jQuery行为。如果渲染引擎没有收到属性更新,我不明白为什么它会重新绘制任何内容。
.css()
或doElement.style
向元素添加内联样式,在您的例子中,div
的样式不是内联的,在jQuery('div').css('position','fixed')代码>命令DOM树将更改。浏览器绝对会重新绘制(呈现)页面
我不确定,但我猜即使相同的样式
出现在DOM树中,并且您重新指定样式
浏览器,也会再次呈现页面。jQuery.css()
调用将更改DOM元素,但由浏览器重新绘制任何内容
下面是Mozilla关于重画的一篇有趣的文章:(注意,我链接到了“回流原因”部分)
更新
在您为已经具有位置:固定的元素设置位置:固定的的情况下,由于重绘,不会有太多开销。具有position:fixed
或position:absolute
的元素将从DOM的正常流中删除,当对它们进行操作时,不会触发整个DOM重画。相反,只重绘元素本身和任何重叠元素
另一方面,如果您正在制作任何动画,这一点很重要,因为动画会导致大量重画,如果您没有设置position:fixed
或position:absolute
,则动画中的每个步骤都会重画整个DOM。另外,由于此元素的重绘具有递归性质,因此任何具有“显示:表格”的元素重绘可能需要三倍的时间(停止使用表格进行布局:)。因此,为了安全起见,除非必要,不要更改属性
if(jQuery('div').css('position') != 'fixed')
jQuery('div').css('position', 'fixed');
这种行为不是jQuery的选择。该库只操作DOM,并依赖浏览器在其认为合适时更新其窗口。我想我应该稍微回答一下这个问题,jQuery是否会对其应用“修复”,或者是否会看到它已经修复,并且什么也不做?jQuery(自1.7.1版起)不会检查样式是否已应用于元素(可能是出于性能方面的原因)。很好地指出它将脱离流程。我想问题更多地集中在“jQuery是否会在再次应用之前检查样式是否已经应用?”不管是固定的、绝对的等等,它会仅仅看到应用了X样式而什么也不做,还是会盲目地应用CSS,如果浏览器认为合适的话,可能会重新绘制?