как скрыть и показать div, если он не наведен или не нажат через некоторое время

#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>