javascript - 将标题贴在顶部下方,类似于页面索引
问题描述
当用户滚动时,我需要将内容的标题粘贴在其他内容的顶部。现在我已经使用了 bootstrap Scrollspy
。哪个效果很好,但我需要在其中包含以下内容。这是codepen链接。. (未在 SO 编辑器中添加代码,因为它在编辑器中显示移动视图。)
- 目前,两个标题出现在导航栏内的一个屏幕上,另一个来自内容。
- 一个标题应该贴在另一个下面,就好像它是页面的索引一样。
- 当用户点击任何标题页面时,应该滚动到该内容(这是在 中实现的
Scrollspy
,但目前只显示带有.active
类的标题)。
我知道编写自定义 JS 对我来说需要一些时间(这对我来说是最后的选择)。我试图用谷歌搜索,但大多数插件都类似于 Scrollspy。
我可以为此使用任何插件,或者任何简单的更改Scrollspy
也可以工作。
解决方案
我想这就是你要找的。如果您需要任何其他更改,请告诉我。
$(document).ready(function() {
var navHeight, activeLiCount, activeLiHeight;
$(document).on("scroll", onScroll);
function onScroll(event) {
var previousScrollTop = 0,
scrollLock = false,
scrollPos = $(document).scrollTop() + $(".nav").height();
$(".nav a").each(function() {
var currLink = $(this),
refElement = $(currLink.attr("href"));
if (refElement.position().top <= scrollPos) {
currLink.parent("li").addClass("active");
if (scrollLock) {
$(window).scrollTop(previousScrollTop);
}
previousScrollTop = $(window).scrollTop();
} else {
currLink.parent("li").removeClass("active");
}
});
}
$("#header a").click(function() {
var pageId = $(this).attr("href");
$(".nav li").removeClass("active");
$(this).parent("li").addClass("active");
activeLiCount = $(this).parent("li").index();
activeLiHeight = $(".nav li.active").height();
navHeight = activeLiCount * activeLiHeight;
$("html, body").animate({
scrollTop: $(pageId).offset().top - navHeight
}, 500);
return false;
});
});
* {
margin: 0;
padding: 0;
font-family: arial;
}
#header {
background: #000;
overflow: hidden;
position: fixed;
top: 0;
left: 0;
right: 0;
}
ul.nav>li {
list-style: none;
display: none;
}
.nav>li>a {
color: #000;
text-decoration: none;
padding: 10px;
display: block;
font-size: 16px;
border-bottom: 1px solid #999;
}
.nav li.active,
.nav a:hover {
background: #fff;
color: #000;
}
.nav li.active {
display: block;
}
.section h3 {
padding: 12px 0;
margin: 0 0 10px 0;
font-size: 16px;
font-weight: normal;
border-bottom: 1px solid #999;
}
p {
margin: 10px 0 0 0;
}
.section {
min-height: 100vh;
padding: 0 15px;
}
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet" />
<div id="header">
<ul class="nav">
<li class="active"><a href="#page1">Page One</a></li>
<li><a href="#page2">Page Two</a></li>
<li><a href="#page3">Page Three</a></li>
<li><a href="#page4">Page Four</a></li>
<li><a href="#page5">Page Five</a></li>
</ul>
</div>
<div id="page1" class="section">
<h3>Page one</h3>
<p>Donec id ipsum odio. Cras accumsan consectetur nibh, vitae pretium dui hendrerit sed. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed ac orci elit. Nunc faucibus eros vulputate purus aliquam vel blandit ligula
pharetra.
</p>
<p>Donec id ipsum odio. Cras accumsan consectetur nibh, vitae pretium dui hendrerit sed. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed ac orci elit. Nunc faucibus eros vulputate purus aliquam vel blandit ligula
pharetra.
</p>
<p>Donec id ipsum odio. Cras accumsan consectetur nibh, vitae pretium dui hendrerit sed. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed ac orci elit. Nunc faucibus eros vulputate purus aliquam vel blandit ligula
pharetra.
</p>
<p>Donec id ipsum odio. Cras accumsan consectetur nibh, vitae pretium dui hendrerit sed. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed ac orci elit. Nunc faucibus eros vulputate purus aliquam vel blandit ligula
pharetra.
</p>
<p>Donec id ipsum odio. Cras accumsan consectetur nibh, vitae pretium dui hendrerit sed. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed ac orci elit. Nunc faucibus eros vulputate purus aliquam vel blandit ligula
pharetra.
</p>
</div>
<div id="page2" class="section">
<h3>Page Two</h3>
<p>Donec id ipsum odio. Cras accumsan consectetur nibh, vitae pretium dui hendrerit sed. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed ac orci elit. Nunc faucibus eros vulputate purus aliquam vel blandit ligula
pharetra.
</p>
<p>Donec id ipsum odio. Cras accumsan consectetur nibh, vitae pretium dui hendrerit sed. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed ac orci elit. Nunc faucibus eros vulputate purus aliquam vel blandit ligula
pharetra.
</p>
</div>
<div id="page3" class="section">
<h3>Page Three</h3>
<p>Donec id ipsum odio. Cras accumsan consectetur nibh, vitae pretium dui hendrerit sed. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed ac orci elit. Nunc faucibus eros vulputate purus aliquam vel blandit ligula
pharetra.
</p>
<p>Donec id ipsum odio. Cras accumsan consectetur nibh, vitae pretium dui hendrerit sed. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed ac orci elit. Nunc faucibus eros vulputate purus aliquam vel blandit ligula
pharetra.
</p>
<p>Donec id ipsum odio. Cras accumsan consectetur nibh, vitae pretium dui hendrerit sed. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed ac orci elit. Nunc faucibus eros vulputate purus aliquam vel blandit ligula
pharetra.
</p>
</div>
<div id="page4" class="section">
<h3>Page Four</h3>
<p>Donec id ipsum odio. Cras accumsan consectetur nibh, vitae pretium dui hendrerit sed. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed ac orci elit. Nunc faucibus eros vulputate purus aliquam vel blandit ligula
pharetra.
</p>
<p>Donec id ipsum odio. Cras accumsan consectetur nibh, vitae pretium dui hendrerit sed. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed ac orci elit. Nunc faucibus eros vulputate purus aliquam vel blandit ligula
pharetra.
</p>
<p>Donec id ipsum odio. Cras accumsan consectetur nibh, vitae pretium dui hendrerit sed. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed ac orci elit. Nunc faucibus eros vulputate purus aliquam vel blandit ligula
pharetra.
</p>
</div>
<div id="page5" class="section">
<h3>Page Five</h3>
<p>Donec id ipsum odio. Cras accumsan consectetur nibh, vitae pretium dui hendrerit sed. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed ac orci elit. Nunc faucibus eros vulputate purus aliquam vel blandit ligula
pharetra.
</p>
<p>Donec id ipsum odio. Cras accumsan consectetur nibh, vitae pretium dui hendrerit sed. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed ac orci elit. Nunc faucibus eros vulputate purus aliquam vel blandit ligula
pharetra.
</p>
<p>Donec id ipsum odio. Cras accumsan consectetur nibh, vitae pretium dui hendrerit sed. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed ac orci elit. Nunc faucibus eros vulputate purus aliquam vel blandit ligula
pharetra.
</p>
</div>
推荐阅读
- python - 无法在 Flask JWT Extended 中获取授权标头
- angular - Angular 和 AWS 中的静态网站定义和部署
- php - Apache 在使用 mod_rewrite 时提供缓存内容
- hash - 了解命令行 OpenSSL DGST Sha256 命令
- ios - 调用函数后如何导航到不同的内容页面
- web-scraping - 如何在scrapy spider运行时获取新的token headers
- view - 创建 DB2 视图时出错:规范 ORDER BY、OFFSET 或 FETCH 子句无效
- python - 如何使用 python 从存储在 AWS 的 Secrets Manager 中的私钥生成 OpenSSH RSA 密钥?
- node.js - Heroku 在部署时无法正确使用 NPM_CONFIG 变量
- .net - 是否可以在屏幕上的任何位置进行标注?