javascript - jquery平滑滚动不正确的结果
问题描述
我正在尝试平滑滚动
但是滚动条不能按预期工作,结果看起来平滑滚动,默认跳转到#同时工作
这是我的 HTML(引导带导航)
<nav class="navbar fixed-top navbar-expand-sm navbar-light bg-light mb-3" id="main-nav">
<div class="container">
<a class="navbar-brand" href="#">Navbar</a>
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="#welcome">Welcome</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#about">About</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#services">Services</a>
</li>
</ul>
</div>
</nav>
这里是我的 js
<script>
$('body').scrollspy({
target: '#main-nav',
offset: $('#main-nav').outerHeight()
});
// add smooth scrolling
$('#main-nav a').on('click',(event) => {
const sender = event.target; // sender
// check for a hash value
if (sender.hash)
{
// prevent default behaviour
event.preventDefault();
// get sendar hash
const hash = sender.hash;
const navHeight = $('#main-nav').outerHeight();
// animate smooth scroll
$('html').animate({
scrollTop: $(hash).offset().top - (navHeight + 1),
},1500,() => {
// add hash to URL after scroll
this.location.hash = hash;
});
}
});
</script>
和页面内容
<section id="welcome">
<h3>Welcome</h3>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dicta eaque similique cupiditate! Pariatur, aliquid quae recusandae quidem atque cumque perspiciatis possimus quod repudiandae, labore nobis eius voluptatum! Impedit, sint in.
</p>
</section>
<section id="about">
<h3>About</h3>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dicta eaque similique cupiditate! Pariatur, aliquid quae recusandae quidem atque cumque perspiciatis possimus quod repudiandae, labore nobis eius voluptatum! Impedit, sint in.
</p>
</section>
<section id="services">
<h3>Services</h3>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dicta eaque similique cupiditate! Pariatur, aliquid quae recusandae quidem atque cumque perspiciatis possimus quod repudiandae, labore nobis eius voluptatum! Impedit, sint in.
</p>
</section>
当我第一次单击链接nav
时,它会在内容标题上滚动导航栏(使我的标题消失)
但是当我再次单击相同的链接时,它会向上滚动一点并显示为我的预期结果
所以。任何人都知道如何解决此问题以使滚动在第一次单击时正确工作
谢谢你。
解决方案
这是您的更改代码,添加padding-top:52px;
到section
元素并 - (navHeight + 1)
从中删除$(hash).offset().top
。
$('body').scrollspy({
target: '#main-nav',
offset: $('#main-nav').outerHeight()
});
// add smooth scrolling
$('#main-nav a').on('click',(event) => {
const sender = event.target; // sender
// check for a hash value
if (sender.hash)
{
// prevent default behaviour
event.preventDefault();
// get sendar hash
const hash = sender.hash;
const navHeight = $('#main-nav').outerHeight();
// animate smooth scroll
$('html').animate({
scrollTop: $(hash).offset().top,
},1500,() => {
// add hash to URL after scroll
this.location.hash = hash;
});
}
});
section{
min-height:500px;
padding-top:52px;
}
#main-nav{
position:fixed;
width:100%;
top:0px;
background:#ffffff;
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
<nav class="navbar fixed-top navbar-expand-sm navbar-light bg-light mb-3" id="main-nav">
<div class="container">
<a class="navbar-brand" href="#">Navbar</a>
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="#welcome">Welcome</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#about">About</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#services">Services</a>
</li>
</ul>
</div>
</nav>
<section id="welcome">
<h3>Welcome</h3>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dicta eaque similique cupiditate! Pariatur, aliquid quae recusandae quidem atque cumque perspiciatis possimus quod repudiandae, labore nobis eius voluptatum! Impedit, sint in.
</p>
</section>
<section id="about">
<h3>About</h3>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dicta eaque similique cupiditate! Pariatur, aliquid quae recusandae quidem atque cumque perspiciatis possimus quod repudiandae, labore nobis eius voluptatum! Impedit, sint in.
</p>
</section>
<section id="services">
<h3>Services</h3>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Dicta eaque similique cupiditate! Pariatur, aliquid quae recusandae quidem atque cumque perspiciatis possimus quod repudiandae, labore nobis eius voluptatum! Impedit, sint in.
</p>
</section>
推荐阅读
- junit5 - 断言数组中的值,数组没有名称
- assembly - 在程序集中读取命令行参数
- listview - Flutter Listview 语言选择需要在选择时进行圆形复选框设计
- apache-kafka - 附加卷时,Kafka connect 找不到可用的代理
- react-native - 获取存储在状态中的数组长度时出错
- python - Python:有没有办法提取和连接多个文本文件系列,同时删除每个文件的前 3 行?
- excel - 在其他工作表和向下填充日期的最后一行下方复制和粘贴动态范围
- markdown - doxygen 抱怨我的 image-in-link 标签
- html - 是否可以在中使用样式属性
tag?</h1> <div id="body"><p>How to use <code>style</code> attribute in <code><title></code> tag? Is it possible?</p> </div> </data> <hr><data id="62063004"> - elasticsearch - 如何理解 x-pack 上“搜索延迟”的弹性搜索性能