Изменение css через JS. проблема
На сайте есть иконка (main_menu_container). При нажатии на иконку появляется небольшое меню(main_menu), фон затемняется (opacity_background с размером 100% на 100%, прозрачным бекграундом и z-index меньшим чем у менюшки. изначально его display none, но при нажатии на иконку становится block). Проблема такая: менюшка и фон появляются. В их html дописывается style="display:block;". НО! Дальше при нажатии на opacity_background main_menu и сам opacity_background должны снова стать diplay:none. По какой-то причине этого не происходит.Console молчит. Функция работает, если пихнуть туда алерты то по клику на opacity_background они появляются. Прошу помощи.
JS код прилагается:
var background = document.getElementById('opacity_background');
var menu = document.getElementById('main_menu');
document.getElementById('main_menu_container').addEventListener('click', popUpMenu);
background.addEventListener('click', hideMenu);
function popUpMenu() {
background.style.display = 'block';
menu.style.display = 'block';
}
function hideMenu() {
background.style.display = 'none';
menu.style.display = 'none';
}
|
batcave,
добавьте html и css |
<header id="main_header"> <nav id="main_menu_container"> <div id="main_menu"> <form id="menu_form" action="google.com" method="post"> <input type="submit" id="search_submit" value=""> <div id="cross"></div> <input type="search" id="menu_search" placeholder="Search..."> </form> <ul id="ul_category"> <li>Furniture</li> <li>Decoration</li> <li>Lighting</li> <li>Electronics</li> </ul> <ul id="ul_info"> <li>About Us</li> <li>Contact Us</li> <li>Delivery</li> <li>Returns</li> </ul> </div> <div id="opacity_background"></div> </nav> <div id="shop_bag"></div> <div id="logo">Soho</div> </header>
#main_menu_container, #shop_bag {
float: left;
width: 60px;
height: 60px;
border-right: solid 1px #2f2f2f;
background-image: url(../images/mobile_menu_icon.png);
}
#opacity_background {
display: none;
position: fixed;
z-index: 100;
width: 100%;
height: 100%;
background-color: rgba(194, 196, 199, 0.6);
}
#main_menu {
position: absolute;
z-index: 101;
margin: 0 auto;
display: none;
padding-bottom: 76px;
width: 400px;
background-color: white;
}
css добавил только тот что в js использую. или нужно все что в header? |
Так-с, проблема была в том, что opacity_background я положил в main_menu_container. Теперь все работает.
|
batcave,
клик по фону ставит 'none' и всплывает до main_menu_container и верхний клик ставит 'block' отмените всплытие события
function hideMenu(event) {
event.stopPropagation();
background.style.display = 'none';
menu.style.display = 'none';
}
|
Уже решил проблему, но спасибо!
|
| Часовой пояс GMT +3, время: 00:14. |