在下面的代码中,我正在检查窗口是否滚动过了特定点,如果滚动超过该点,则更改元素使用固定位置,以便它不会从页面顶部滚动出去。唯一的问题是,它似乎非常消耗客户端内存(并且实际上拖慢了滚动速度),因为在每个滚动像素上,我都在不断更新元素的样式属性。
在尝试更新之前检查属性是否已存在,是否会产生显着差异?是否有完全不同且更有效的方法可以获得相同的结果?
$(window).scroll(function () {
var headerBottom = 165;
var fcHeight = $("#pnlMainNavContainer").height();
var ScrollTop = $(window).scrollTop();
if (ScrollTop > headerBottom) {
$("#HeaderContentBuffer").attr("style", "margin-top:" + (fcHeight) + "px;");
$("#AddFieldsContainer").attr("style", "position:fixed;width:320px;top:70px;left:41px;");
} else {
$("#HeaderContentBuffer").attr("style", "margin-top: 0px;");
$("#AddFieldsContainer").removeAttr("style");
}
});
当我输入这个问题的时候,我注意到StackOverflow.com在这个页面右侧使用了黄色的“类似问题”和“帮助”菜单,它们使用了与我所描述的相同的功能。 我想知道他们是如何实现的。
scrollTimer
可能会导致您稍后调用clearTimeout()
在一个不再活动的计时器对象上。您不应该这样做,因此更正确的方法是将其设置为null
,以便我们知道计时器不再处于活动状态,并且将来不会对其调用clearTimeout()
。可能浏览器正在保护免受对clearTimeout()
的错误调用,但我喜欢编写正确的代码。 - jfriend00