Задать вопрос
Этот вопрос закрыт для ответов, так как повторяет вопрос Как скрыть меню при выведение курсора за элемент меню?
@Alex_js

Как скрыть меню при выведение курсора за элементы меню?

Добрый день.
Хочу сделать выпадающие меню по наведению мыши.

Задача сделать так, что бы при наведение на span появлялось само меню.
И закрывалось обратно когда курсор мыши выходил за пределы блока div.

Вот мои потуги. Меню вроде появляется, но исчезает сразу же когда курсор выводится за span. Я же хоче сделать так, что бы оно исчезало только в момент, когда курсор будет за пределами всего блока.


let clickOnMe = document.querySelector('span');
let menu = document.querySelector('ul');
clickOnMe.onmouseover = function () {
menu.classList.remove('menu');
menu.classList.add('menuOpen');
}

let div = document.querySelector('div');
div.onmouseout = function () {
menu.classList.remove('menuOpen');
menu.classList.add('menu');
}

Ниже код HTML и CSS

HTML
<div>
     <span>Click to show menu</span>
          <ul class="menu">
			<li>Раздел 1</li>
			<li>Раздел 1</li>
			<li>Раздел 1</li>
			<li>Раздел 1</li>
		</ul>
	</div>


CSS

div {
margin: 0 auto;
width: 200px;
height: 120px;
border: 1px solid black;
}

.menu {
display: none;
}

.menuOpen {
background: gray;
}
  • Вопрос задан
  • 577 просмотров
Подписаться 1 Простой 5 комментариев
Ответы на вопрос 1
@Tranceinheart
Самый простой вариант - поместить ul.menu внутрь самого span.
.menu {
display: none;
}
span:hover .menu{
display:block;
}

В этом случае использовать JS скрипт не придется вообще

Если вы хотите оставить все как есть
let clickOnMe = document.querySelector('span');
let menu = document.querySelector('ul');
clickOnMe.onmouseover = function () {
menu.classList.remove('menu');
menu.classList.add('menuOpen');
}

let div = document.querySelector('div');
div.addEventListener("mouseout", function(e){
  if(e.target == div){
      menu.classList.remove('menuOpen');
      menu.classList.add('menu');
    }
}, false)
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы