My Javscript:
var navTop = document.getElementsByClassName('main-nav');
window.addEventListener('scroll', function() {
if(window.pageYOffset > 100) {
navTop.classList += ' .small';
} else{
navTop.classList = 'main-nav';
};
});
标题:
<div>
<header class='main-nav'>
<nav>
<ul>
<a href='#aboutme'>
<li>About Me</li>
</a>
<br>
<a href='#projects'>
<li>Projects</li>
</a>
<br>
<a href='#experience'>
<li>Experience</li>
</a>
<br>
<a href='#contactme'>
<li>Contact Me</li>
</a>
<br>
</ul>
</nav>
</header>
</div>
我将导航设置为固定,但 JavaScript 没有做任何事情。相反,它只是在每次向下滚动时显示"navTop 为空"错误。我的语法或逻辑是否有任何错误可能导致这种情况?如果有更好的方法来制作折叠标题,我很高兴听到它。
由于getElementsByClassName()
返回 HTMLCollection,您需要使用使用 index 的元素并对其进行操作。在示例中,我使用了0
作为第一个元素。
同样在使用classList
时,需要使用其方法来操作CSS类
var navTop = document.getElementsByClassName('main-nav');
window.addEventListener('scroll', function () {
if (window.pageYOffset > 100) {
navTop[0].classList.add('small')
} else {
navTop[0].classList.remove('small')
};
});
您也可以按照@David的建议使用toggle()
方法
classList.toggle('small', window.pageYOffset > 100);
由于您只有一个具有类main-nav
的元素,因此您可以使用querySelector()
来获取该元素的引用,而不是使用getElementsByClassName()
它将返回元素数组。
将代码更改为:
var navTop = document.querySelector('.main-nav');
window.addEventListener('scroll', function () {
if (window.pageYOffset > 100) {
navTop.classList.add('small')
} else {
navTop.classList.remove('small')
};
});