#javascript #html #css
#javascript #HTML #css
Вопрос:
Я хочу показать липкую панель навигации при прокрутке, и если я остановлю прокрутку и не нажму на нее или не наведу на нее курсор, панель навигации исчезнет. Я добавляю липкую функциональность панели навигации, и она работает нормально. Но я не могу скрыть, если, когда я не прокручиваю и не нажимаю на него или не наведите на него курсор в течение пяти секунд.
Комментарии:
1. какие исследования вы провели.
Ответ №1:
вы можете использовать прослушиватель прокрутки и таймеры, чтобы понять, когда пользователь прекращает прокрутку:
let scrolling;
window.addEventListener('scroll',()=>{
window.clearTimeout(scrolling);
//this is to stop the timer when you scroll again
scrolling = window.setTimeout(doSomething(),5000);
//each time you scroll and stop the counter will start
});
const doSomething = ()=>{
.
.
.
};
Комментарии:
1. на самом деле, есть еще одна анимация, которая вызывает автоматическую прокрутку, я попробовал ваше решение, но оно не работает
2. О какой анимации вы говорите? Можете ли вы поделиться фрагментом кода?
Ответ №2:
прокрутка отличается от щелчка или наведения курсора, я расскажу вам, как скрыть или показать, если он не прокручивается. Вы можете применить тот же метод, нажав или наведя курсор, но в этом случае вы будете использовать целое число, которое увеличивается при каждом нажатии или наведении курсора.
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>