Задать вопрос
Slava_broker
@Slava_broker
broker

Закрыть меню, как сделать на 12 имеющихся js строках?

Есть меню для сайта, ниже всё в одном файле html, при желании скопируйте и откройте в браузере, оно интересное.
На CSS не обращайте внимания, интересует помощь в закрытии меню, непосредственно при клике на ссылки в нем(пункты меню. При нажатии на "close-btn" оно закрывается, а на пункты нет. JS файлы внизу.

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width? initial-scale=1.0">
	<meta http-equiv="X-UA-Compatible" content="ie-edge">
	<link rel="stylesheet" type="text/css" href="style.css">
	<style type="text/css">
		@import url('https://fonts.googleapis.com/css?family=Montserrat:400,700');

		body,html {
			font-family: 'Montserrat';
			margin: 0;
		}

		body a {
			text-decoration: none;
		}


		header {
			padding: 2em;
		}

		header .logo {
			color: black;
			font-weight: bold;
		}

		header .menu-btn {
			width: 18px;
			float: right;
			cursor: pointer;
		}

		header .menu-btn:before {
			content: 'menu';
			color: black;
			font-size: 0.5em;
		}

		section {
			padding: 4em;
		}

		section h1 {
			font-size: 4em;
			margin: 1em auto;
			width: 70%;
		}

		section h1 &::before {
			content: ' ';
			border-top: 5px solid lightgrey;
		}

		nav {
			position: absolute;
			background: black;
			padding: 2em;
			width: calc(100% - 4em);
			height: calc(100vh - 4em);
			display: none;
			transform: scaleX(0);
			transform-origin: right;
		}

		nav .close-btn {
			width: 18px;
			float: right;
			cursor: pointer;
			opacity: 0;
		}

		nav ul {
			list-style-type: none;
			margin: 10% auto 0 auto;
			padding: 0;
			display: grid;
			grid-template-columns: repeat(4, 25%);
			width: 80%;
		}

		nav ul a {
			color: white;
			font-weight: bold;
			font-size: 1.4em;
		}

		nav ul span {
			color: grey;
			display: block;
			font-size: 0.75em;
			margin-top: 20px;
		}

		nav li {
			opacity: 0;
		}

		.show-menu {
			display: block;
			animation: slide-menu .5s ease-in forwards;
		}

		.show-menu .close-btn {
			animation: show-x 1s 1s forwards;
		}

		.show-menu li:nth-of-type(1) {
			animation: menu-item-anim .6s forwards 1s ease-in-out;
		}
		.show-menu li:nth-of-type(2) {
			animation: menu-item-anim .6s forwards 1.2s ease-in-out;
		}
		.show-menu li:nth-of-type(3) {
			animation: menu-item-anim .6s forwards 1.4s ease-in-out;
		}
		.show-menu li:nth-of-type(4) {
			animation: menu-item-anim .6s forwards 1.6s ease-in-out;
		}

		@keyframes slide-menu {
			from {
				transform: scaleX(0);
				opacity: 0;
			}
			to {
				transform: scaleX(1);
				opacity: 1;
			}
		}

		@keyframes show-x {
			from {
				opacity: 0;
			}
			to {
				opacity: 1;
			}
		}

		@keyframes menu-item-anim { 
		  from {
		  	transform: translateY(30%);
		  	opacity: 0;
		  }
		  to {
		  	transform: translateY(0);
		  	opacity: 1;
		  }
		}
	</style>
	<title>Megamenu</title>
</head>
<body>

	<nav id="overlay">
		
		<img src="images/close-btn.svg" class="close-btn" id="close-menu">

		<ul>
			<li>
				<a href="#">Главная</a>
				<span>Дополнительный текст</span>
			</li>
			<li>
				<a href="#">Услуги</a>
				<span>Дополнительный текст</span>
			</li>
			<li>
				<a href="#">Продано</a>
				<span>Дополнительный текст</span>
			</li>
			<li>
				<a href="#">Контакты</a>
				<span>Дополнительный текст</span>
			</li>
		</ul>

	</nav>


	<header>

		<a href="#" class="logo">slava broker pro</a>

		<img src="images/menu-btn.svg" class="menu-btn" id="open-menu">
		
	</header>

	<section>
		<h1>this is fancy</h1>
	</section>
	
	<script type="text/javascript">
		var overlay = document.getElementById('overlay');
		var closeMenu = document.getElementById('close-menu');

		document.getElementById('open-menu').addEventListener('click', function() {
			overlay.classList.add('show-menu');
		})

		document.getElementById('close-menu').addEventListener('click', function() {
			overlay.classList.remove('show-menu');
		})
	</script>

</body>
</html>
  • Вопрос задан
  • 86 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
overlay.addEventListener('click', function(e) {
  if ([ '#close-menu', 'li > a' ].some(n => e.target.matches(n))) {
    overlay.classList.remove('show-menu');
  }
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽