我有一个我正在开发的网站(这是一个基本示例),昨天我得到了一些帮助来在单选按钮导航上实现活动状态,我现在正在尝试将其链接起来,以便它在页面滚动时也会发生变化/当当前查看时它只是onClick。
我大致知道如何实现这一点,因为我之前做过类似的事情,但后来我想到,因为页面和滚动条被旋转以适应水平效果,我不知道它现在是 scrollTop 还是 scrollLeft。我以前从未使用过 scrollLeft,所以我不确定如何正确使用它。我想知道是否有人以前实现过类似的东西,正确的方法是什么?我已经尝试了两者,但似乎没有任何效果。这就是我大致想要实现的目标(但一次只有一个课程处于活动状态)。
我想也许使用 Waypoints 可能是另一种选择,但同样很难在网上找到任何内容来解释当网站多次旋转时这是如何工作的。
我的 JS 知识不稳定(仍在学习!),我只是想实现我认为可行的方法,所以这可能甚至不正确,任何理解我做错了什么的帮助将不胜感激!
// --- change span classes on click
const setIconState = (icon, state) => icon.className = state
? icon.className.replace('button-off', 'button-on')
: icon.className.replace('button-on', 'button-off')
const toggleIcon = element => {
const className = element.className;
element.className = className.indexOf('button-on') > -1
? setIconState(element, false)
: setIconState(element, true);
}
const setIconActiveState = (icon, state) => icon.className = state
? icon.className = `${icon.className} active`
: icon.className = icon.className.replace('active', '')
document.querySelectorAll('.bottomnav span.icon')
.forEach(icon => {
icon.onclick = (e) => {
const {
target: clickedSpan
} = e;
const siblings = [...clickedSpan.parentElement.parentElement.querySelectorAll('span.icon')]
.filter(sibling => sibling != clickedSpan);
siblings.forEach(icon => {
setIconState(icon, false);
setIconActiveState(icon, false);
});
setIconState(clickedSpan, true);
setIconActiveState(clickedSpan, true);
};
});
// --- change span classes on scroll test
function onScroll(event){
var scrollPos = $(document).scrollTop();
$('.bottomnav a').each(function () {
var currLink = $(this);
var refElement = $(currLink.attr("href"));
if (refElement.position().top <= scrollPos && refElement.position().top + refElement.height() > scrollPos) {
currLink.addClass("active");
}
else{
currLink.removeClass("active");
}
});
}
潇潇雨雨
相关分类