javascript - 如果一段时间后没有悬停或单击,如何隐藏和显示 div
问题描述
我想在滚动上显示一个粘性导航栏,如果我停止滚动并且不单击它或不将鼠标悬停在它上面,导航栏就会消失。我添加了导航栏的粘性功能,它工作正常。但是,如果我不滚动并且不单击它或不将鼠标悬停在其上五秒钟,我将无法隐藏。
解决方案
滚动与单击或悬停不同,我将告诉您如何隐藏或显示它是否不滚动您可以通过单击或悬停应用相同的方法,但在这种情况下,您将使用一个整数,每次单击或悬停都会增加。
1-定义一个名为previousScroll的变量将为其分配一个值document.documentElement.scrollTop;
并且这个变量将帮助我们检查用户是否改变了滚动位置(滚动与否)
2-当用户滚动第一件事时添加滚动事件监听器我们将清除我们将在下一步设置的先前超时它还将显示带有 style.display="block" 或 css 类的导航栏
3-最后一件事将设置超时,它将在 5 秒后调用,以检查前一个滚动是否相等,document.documentElement.scrollTop;
如果它们相等,则用户不会滚动 5 秒,因为如果他滚动,那么这个值会改变如果是这样,我们可以隐藏导航栏,当他再次滚动时,它会出现,依此类推代码示例。
const navMenu = document.querySelector(".navbar");
let myVar;
function checkScroll() {
myVar = setTimeout(function(){
if (document.documentElement.scrollTop == lastTop){
navMenu.style.display = "none";
}
}, 5000);
}
function clearTimeoutFunction() {
clearTimeout(myVar);
}
let lastTop = 0;
window.addEventListener("scroll", ()=>{
clearTimeout(myVar);
navMenu.style.display = "block";
lastTop = document.documentElement.scrollTop;
checkScroll();
});
body {margin:0;}
.navbar {
overflow: hidden;
background-color: #333;
position: fixed;
top: 0;
width: 100%;
}
.navbar a {
float: left;
display: block;
color: #f2f2f2;
text-align: center;
padding: 14px 16px;
text-decoration: none;
font-size: 17px;
}
.navbar a:hover {
background: #ddd;
color: black;
}
.main {
padding: 16px;
margin-top: 30px;
height: 1500px; /* Used in this example to enable scrolling */
}
<div class="navbar">
<a href="#home">Home</a>
<a href="#news">News</a>
<a href="#contact">Contact</a>
</div>
<div class="main">
<h1>Fixed Top Menu</h1>
<h2>Scroll this page to see the effect</h2>
<h2>The navigation bar will stay at the top of the page while scrolling</h2>
<p>Some text some text some text some text..</p>
<p>Some text some text some text some text..</p>
<p>Some text some text some text some text..</p>
<p>Some text some text some text some text..</p>
<p>Some text some text some text some text..</p>
<p>Some text some text some text some text..</p>
<p>Some text some text some text some text..</p>
<p>Some text some text some text some text..</p>
<p>Some text some text some text some text..</p>
<p>Some text some text some text some text..</p>
<p>Some text some text some text some text..</p>
<p>Some text some text some text some text..</p>
<p>Some text some text some text some text..</p>
<p>Some text some text some text some text..</p>
<p>Some text some text some text some text..</p>
<p>Some text some text some text some text..</p>
<p>Some text some text some text some text..</p>
<p>Some text some text some text some text..</p>
<p>Some text some text some text some text..</p>
<p>Some text some text some text some text..</p>
</div>
推荐阅读
- java - Tomcat 不排除在 tomcat.util.scan.StandardJarScanFilter.jarsToSkip 中指定的 JAR
- java - 如何在 onResponse 方法中有意图地传递数据
- python - OpenNI 和 OpenCV:cv2.imshow() 崩溃并出现错误:(-215:Assertion failed) dst.data == (uchar*)dst_ptr in function 'cvShowImage'
- java - 如何显示我的 ArrayList
我的 ScrollView 的联系人? - xml - 从 XML 节点转换 XHTML 并调用模板将 XHTML 作为上下文传递
- c - 数组中的最小元素
- python - 如何使用 python 在 Cassandra 中设置缓存以快速读取行?
- python - 如何在没有匹配索引的情况下比较来自两个 DF 的两个日期?
- dart - 列 mainAxisSize:MainAxisSize.min 不起作用
- swift - 注销 Sinch 用户