@Kardamon_mchl

Как реализовать закрытие при клике на фон и заблокировать скролл?

Есть худо-бедно написанный код после попыток кое-как все функции соединить воедино. Выпадающее и закрывающееся многоуровневое меню по клику на кнопку с затемнением фона с помощью отдельного дива с классом.

Пробовал внедрить сюда код с функцией закрытия по клику на фон и блокирования скролла, но все попытки были тщетны. Добавляю функцию закрытия по клику вне элемента, меню закрывается, но открывается только после двух кликов по кнопке из-за проверки состояния в начале кода и исправить как-то у меня не получается. Прошу помощи у вас, дорогие форумчане. В js. jquery не силен, самоучка.

https://codepen.io/kardamon_mchl/pen/rNdmwem
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
Starina_js
@Starina_js
full-stack web dev
Ух.. Код немного избыточен.
Как я понял, у вас есть кнопка, которая открывает меню. Необходимо по клику открывать меню, блокировать скролл документа, плюс чтобы темнел фон. А при клике вне объекта меню - закрывалось меню, исчезал фон, скролл появлялся.

1. Как заблокировать скролл? Вешать на body - overflow: hidden при клике на кнопку.
2. Закрытие при клике вне меню. (загуглил, автор https://misha.agency/javascript/klik-vne-elementa.html)
jQuery(function($){
	$(document).mouseup( function(e){ // событие клика по веб-документу
		var div = $( "#popup" ); // тут указываем ID элемента
		if ( !div.is(e.target) // если клик был не по нашему блоку
		    && div.has(e.target).length === 0 ) { // и не по его дочерним элементам
			div.hide(); // скрываем его
		}
	});
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы