所以我有一個頁面,當你滾動到相應的部分時,活動菜單項被突出顯示。如何將活動類添加到滾動我的事件的正確導航項中?
我的代碼工作,但我不明白爲什麼,特別是這部分:
document.querySelector('nav a[href="' + anchorID + '"]').classList.add("active");
在window.onscroll for循環收集所有從菜單
錨(nav a
)然後我可以訪問個人anchorIDs(的HREF)有:
var anchorID = anchorsArray[i].getAttribute("href");
我不明白,是.active
類如何被添加到基於視窗內當前部分正確anchorID - 在沒有比較的部分ID和相應的錨HREF之間進行。例如。在href &部分ID:
<a href="#section-2" class="">Section 2</a>
<section id="section-2"></section>
..are上滾動從未進行比較。
DEMO:https://jsfiddle.net/zgpzrvns/
所有JS
(function() {
var anchorsArray = document.querySelectorAll("nav a");
var sections = document.querySelectorAll("section");
var sectionsArray = [];
// Collect all sections and push to sectionsArray
for (var i = 0; i < sections.length; i++) {
var section = sections[i];
sectionsArray.push(section);
}
window.onscroll = function() {
var scrollPosition = window.pageYOffset;
for (var i = 0; i < anchorsArray.length; i++) {
// Get hrefs from each anchor
var anchorID = anchorsArray[i].getAttribute("href");
var sectionHeight = sectionsArray[i].offsetHeight;
var sectionTop = sectionsArray[i].offsetTop;
if (
scrollPosition >= sectionTop &&
scrollPosition < sectionTop + sectionHeight
) {
/**
* I don't understand how querySelector finds & adds the active
* class to the correct anchor, when no comparison is made between the
* section ID (that is inside current section in viewport) and the
* anchors ID from anchorsArray
*/
document
.querySelector('nav a[href="' + anchorID + '"]')
.classList.add("active");
} else {
document
.querySelector('nav a[href="' + anchorID + '"]')
.classList.remove("active");
}
}
};
})();
總結:的active
類是如何加入到糾正錨ID,當內部的相應部分ID滾動時的視口(在滾動事件中從未檢測到部分ID?)
我對此很困惑,我敢打賭這是我忽略的一些愚蠢的東西!
將不勝感激一些輸入! :-)
謝謝。關於:「對於你檢查的每一個,如果相同索引的部分在視口中。 「 - 這是我沒有得到的。它如何知道在* same *索引處的視口中的部分是否與獲取活動類的相應錨點相同?這聽起來像是有比較,但不是ID之間? 我不知道爲什麼我不明白:S – Capax
@Capax編輯了我的答案,以獲取更詳細的解釋 –
謝謝@Daniel Ziegler。現在我懂了!這是我完全忽略的部分:我從sectionHeight&sectionTop獲得的索引變量來自循環的anchorsArray [i] - 我正在查看滾動事件外部的Array循環(認爲sectionHeight [i]&sectionTop [i]從* that * collection獲得了它們的索引變量,而不是錨循環中的那個! – Capax