我想每次更新页面显示乱码用户滚动到某一部分:更新页面显示乱码
<section data-anchor="projects"></section>
$(document).bind('scroll',function(e){
$('section').each(function(){
var element = $(this),
dataHashValue = element.data('anchor');
if(dataHashValue) {
var sectionOffset = 10,
elementOffsetTop = element.offset().top,
elementHeight = element.height(),
currentPageOffsetY = window.pageYOffset;
if (elementOffsetTop < currentPageOffsetY + sectionOffset
&& elementOffsetTop + elementHeight > currentPageOffsetY + sectionOffset) {
window.location.hash = dataHashValue;
}
}
});
});
我这个问题是我有性能问题时,当用户快速滚动时,帧速率下降很多......我如何优化此代码? (我尝试了历史API,但这使它变得更糟)。
编辑:以下Taytorious意见,我实现了一个反跳,但是更新功能内环路仍有下探我帧率很多
function AutoHash() {
this.scroller = window;
this.elements = $('[data-anchor]').map(function(index, item) {
var $element = $(item);
return {
yOffset: $element.offset().top,
height: $element.height(),
dataHashValue: $element.data('anchor')
};
});
}
update : function (lastScroll, currentScroll) {
this.elements.each(function(index, item) {
var sectionOffset = 10,
currentPageOffsetY = currentScroll;
if (item.yOffset < currentPageOffsetY + sectionOffset
&& item.yOffset + item.height > currentPageOffsetY + sectionOffset) {
window.location.hash = item.dataHashValue;
}
});
}
这很好,它有帮助,但仍有很多开销;我将偏移量存储在一个数组中,但是我无法想到如何在不更新每个更新时遍历数组的情况下跟踪当前部分,我认为主要问题是该循环,您可以详细阐述一下? –
像这样的东西应该工作。如果你正在寻找更清洁/更简单的东西,请查看[航点](http://imakewebthings.com/waypoints/)。 – Taytorious