javascript - 当菜单的类名不是“xxx”时,我希望链接在锚点下方 50px
问题描述
我在包含锚链接的 div 中有一个顶部菜单,如下所示:
<div id="menu">
<ul>
<li>
<a href="#item1">ITEM 1</a>
</li>
<li>
<a href="#item2">ITEM 2</a>
</li>
<li>
<a href="#item3">ITEM 3</a>
</li>
</ul>
</div>
当我向下滚动网站时,javascript会在滚动时自动添加一个“wrapfixed”类以使菜单具有粘性,它变成这样:
<div id="menu" class="wrapfixed">...</div>
当“wrapfixed”类不存在时,我希望链接在锚点下方 50px 处。
你是怎样做的 ?
谢谢
解决方案
要实现这一点,您需要阻止 # 链接的默认链接行为。然后检查链接父菜单是否有wrapfixed
类,以便您可以设置额外的填充。在使用之前window.ScrollTo
将页面滚动到正确的位置。
像这样的东西应该适合你:
function scrollToLinks(){
var links = document.querySelectorAll("a");
for (let i=0, len=links.length; i < links.length; i++) {
links[i].addEventListener("click", function(event) {
event.preventDefault();
const index = event.target.href.indexOf('#');
const selector = event.target.href.substring(index);
const target = document.querySelector(selector);
const box = target.getBoundingClientRect();
const padding = event.target.parentNode.parentNode.parentNode.classList.contains('wrapfixed') ? 50 : 0;
const y = box.top + padding;
window.scrollTo(0, y);
})
}
}
window.addEventListener("load", scrollToLinks);
推荐阅读
- r - Merge two tables and aggregate
- r - Error in seas(., x11 = "") : no output has been generated (R seasonal library isn't working fine)
- python - How to filter only record details which have max date
- windows - 什么会导致错误代码 32 后跟错误代码 2?
- django - Django model.py 多对多错误查询冲突
- javascript - 这段代码可以重构为更短的代码吗?
- sql - 如何从sql中的行和列标题中获取最大值?
- python - 类型错误:
() 缺少 1 个必需的位置参数:'b' (molfile_to_params.py) - php - 为什么 PHP 函数只在 mysqli_fetch 上返回一个值?
- maven - 无法在 Karaf 中加载捆绑包