1.點擊跳轉到相應區域: 頁面scroll掉的距離 = 目標板塊在文檔中的垂直坐標 - 起始板塊(目標位置)到視圖頂部的距離; document.body.scrollTop = scrollLength; document.documentElement.scrollTop = scrollLen ...
1.點擊跳轉到相應區域:
頁面scroll掉的距離 = 目標板塊在文檔中的垂直坐標 - 起始板塊(目標位置)到視圖頂部的距離;
document.body.scrollTop = scrollLength;
document.documentElement.scrollTop = scrollLength;
2.滾動滾動條時對應的導航鏈接被激活
每個板塊的導航鏈接對應一個長度區間,當滾動條滾動調的長度落在該區間時,該導航條則被選中。區間範圍為當前板塊的scrollTop值(包含)~下一板塊的ScrollTop值(不包含)。
例如:第一板塊的區間為0~第一板塊的高度(即第二板塊的scrollTop值-第一板塊的scrollTop值),當滾動條滾動的距離落在該區間時,則第一個鏈接激活。
如何確定區間?將鏈接倒敘排列,依次迴圈判斷,第一個(滾動條滾動的距離>區間最小值)成立的鏈接即為激活鏈接。
var currIndex=0; window.onscroll = function () { var $cptop = $('.cp-top'); var scrollLength = document.documentElement.scrollTop || document.body.scrollTop; //滾動條滾動的距離 var list_area = _.map($('#area li.group'), function (item, index) { return { top: item.offset().top, index: index }; }); //所有的板塊 var lengthToTop=$('#area li.group')[0].getBoundingClientRect().top; list_area = _.sortBy(list, function (item) { return -item.index; }); //倒序 var reachedArea = _.find(list_area, function (item) { return scrollLength >= item.top-lengthToTop; //滾動的距離大於該區間的最小值,需要統一調整到從0開始 }); if (currIndex != reachedArea.index) { currIndex = reachedArea.index; $(".navField li").removeClass('selected'); $(".navField li").eq(reachedField.index).addClass('selected'); } }