【发布时间】:2019-07-05 13:59:51
【问题描述】:
https://codepen.io/zchee/pen/ogzvZZ
上面的 codepen 链接包含一个滚动动画示例,当您向下滚动时,它会改变导航的行为和外观,这是使用纯原生 JavaScript 完成的。问题是我不明白这个脚本是如何工作的。我对 JavaScript 有基本的了解,到目前为止我知道...
有 3 个变量——section(选择“section”类)、一个空对象 {},以及在函数内部的值为 0 的 i。
研究了一下,发现Array.prototype.forEach.call和[ ].forEach(function())是一样的。所以据我了解, e 是一个参数。从这里开始,我迷路了,因为我不知道这意味着什么 section[e.id] = e.offsetTop;
好的,所以我理解 window.onscroll = function() {} 但不是 100% 确定为什么我们需要为 scrollPosition 创建一个等于 scrollTop 或 body.scrollTop 的变量?
我对其余的代码感到迷茫……我很欣赏逐行解释。谢谢。
(function() {
'use strict';
var section = document.querySelectorAll(".section");
var sections = {};
var i = 0;
Array.prototype.forEach.call(section, function(e) {
sections[e.id] = e.offsetTop;
});
window.onscroll = function() {
var scrollPosition = document.documentElement.scrollTop || document.body.scrollTop;
for (i in sections) {
if (sections[i] <= scrollPosition) {
document.querySelector('.active').setAttribute('class', ' ');
document.querySelector('a[href*=' + i + ']').setAttribute('class', 'active');
}
}
};
})();
【问题讨论】:
-
创建
scrollPosition变量不是必要,但它允许稍后在shortif语句中使用它(它如果是if (sections[i] <= (document.documentElement.scrollTop || document.body.scrollTop)) {,看起来会更糟
标签: javascript html foreach