我想每次更新頁面顯示亂碼用戶滾動到某一部分:更新頁面顯示亂碼
<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