Всплывающее окно при клике! Прошу помочь!
Добрый вечер, дорогие форумчане.
Нужна помощь, есть сайт, при наведении на ссылку бокового меню, появляются подкатегории, нужно сделать, чтобы они появлялись при клике. Перекопала весь CSS, но видимо дело в скрипте. Сама с языком мала знакома, может кто поможет. Вот сайт: ССЫЛКА Заранее спасибо! :) |
SnezhanaLast, аккордеон чтоли? На форуме поищи их полно. Или по слову открывашка :)
|
Нет, аккордеон сделать понятно как, как сделать, чтобы в меню окно с подменю всплывало не при наведении, а при клике? При замене в CSS hover на active, результата 0.
|
SnezhanaLast, ссылка не туда ведет.
|
Decode,
Поправила. |
SnezhanaLast, так?
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title></title> <style> ul { margin: 0; padding: 0; list-style: none; } .menu { width: 10%; font: 1em/1.2 sans-serif; } .menu__item { padding: 10px; background: #ccc; position: relative; margin-bottom: 5px; cursor: pointer; } .menu__item:last-child { margin-bottom: 0; } .submenu { position: absolute; top: 0; left: 110%; width: 100%; } .submenu__item { background: #bbb; padding: 10px; margin-bottom: 5px; width: 100%; } .submenu--hide { display: none; } </style> </head> <body> <ul class="menu"> <li class="menu__item"> Item 1 <ul class="submenu submenu--hide"> <li class="submenu__item">Subitem 1</li> <li class="submenu__item">Subitem 2</li> <li class="submenu__item">Subitem 3</li> </ul> </li> <li class="menu__item"> Item 2 <ul class="submenu submenu--hide"> <li class="submenu__item">Subitem 1</li> <li class="submenu__item">Subitem 2</li> <li class="submenu__item">Subitem 3</li> </ul> </li> <li class="menu__item"> Item 3 <ul class="submenu submenu--hide"> <li class="submenu__item">Subitem 1</li> <li class="submenu__item">Subitem 2</li> <li class="submenu__item">Subitem 3</li> </ul> </li> </ul> <script> var menu = document.querySelector('.menu'), subMenu = document.querySelectorAll('.submenu'), current; menu.onclick = function(e) { if ( !e.target.classList.contains('menu__item') ) return; current = e.target.querySelector('.submenu'); [].forEach.call(subMenu, function(item) { if (item == current) return; item.classList.add('submenu--hide'); }); current.classList.toggle('submenu--hide'); }; menu.onmousedown = menu.onselectstart = function() { return false; }; </script> </body> </html> |
Спасибо, но не совсем поняла, как в случае с моим меню применить.
|
Decode,
У него немного другая структура. :) |
SnezhanaLast, что значит другая структура?
|
Ну судя по объёму текущего скрипта юзеру вряд ли удастся самому поправить
Тут либо к разработчику, либо заказывать новый, ибо разбираться с длиннокодом дольше, чем сваять новый (Тем паче их там два |
Decode,
Структура: <div> <ul> <li> Новые стили и html меню я и сама написать могу. Дело тут в том, чтобы сохранить имеющееся ("прилипающую стрелку", стиль). Если в CSS hover эффект поменять на active, меню открывается по клику, но тут же секунду в секунду скрывается => дело в JS. |
SnezhanaLast, для начала html измените.
![]() Цитата:
|
Decode,
Обновила, посмотрите, с такой проблемой столкнулась. |
SnezhanaLast, уберите :active. В таблицу стилей добавьте класс submenu-hide, который будет скрывать под-меню. Вставьте скрипт к себе:
var menu = document.querySelector('.page-sidebar-menu'), subMenu = document.querySelectorAll('.sub-menu'), current; menu.onclick = function(e) { if ( !e.target.parentNode != this ) return; current = e.target.querySelector('.sub-menu'); [].forEach.call(subMenu, function(item) { if (item == current) return; item.classList.add('submenu-hide'); }); current.classList.toggle('submenu-hide'); }; menu.onmousedown = menu.onselectstart = function() { return false; }; |
Спасибо Вам большое! Выручили :)
|
Ой. Сделала, а белиберда получилась. :(
В чем косяк? |
SnezhanaLast,
Цитата:
|
Я добавила.
.submenu-hide { display: none; } |
SnezhanaLast, этого мало, надо еще элементам <ul> добавить, которые submenu.
<ul class="sub-menu submenu-hide"> |
Decode,
.submenu-hide { display: none; } .sub-menu .submenu-hide { display: none; } .sub-menu .submenu-hide ul { display: none; } Сделала вот так, но результат тот же самый. :( |
SnezhanaLast, ну элементам <ul>, которые под-меню, надо добавить данные классы!
|
Decode,
Добавила вручную в HTML, сабменю все равно видно, а стоит убрать мешающий класс display: inline-block, так оно попросту не открывается. |
SnezhanaLast, уберите из CSS:
.page-sidebar-menu.page-sidebar-menu-active-submenu li > .sub-menu { display: inline-block !important; } Вот так должно работать: <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title></title> <style> .submenu-hide { display: none; } </style> </head> <body> <ul class="page-sidebar-menu"> <li class="sidebar-menu-item"> <a href="#">One</a> <ul class="sub-menu submenu-hide"> <li>1</li> <li>2</li> <li>3</li> </ul> </li> <li class="sidebar-menu-item"> <a href="#">Two</a> <ul class="sub-menu submenu-hide"> <li>1</li> <li>2</li> <li>3</li> </ul> </li> <li class="sidebar-menu-item"> <a href="#">Three</a> <ul class="sub-menu submenu-hide"> <li>1</li> <li>2</li> <li>3</li> </ul> </li> </ul> <script> var menu = document.querySelector('.page-sidebar-menu'), subMenu = document.querySelectorAll('.sub-menu'), current; menu.onclick = function(e) { var target = e.target; while(target != this) { if ( target.classList.contains('sub-menu') ) break; if ( target.classList.contains('sidebar-menu-item') ) { current = target.querySelector('.sub-menu'); [].forEach.call(subMenu, function(item) { if (item == current) return; item.classList.add('submenu-hide'); }); current.classList.toggle('submenu-hide'); break; } target = target.parentNode; } return false; }; menu.onmousedown = menu.onselectstart = function() { return false; }; </script> </body> </html> И да, добавьте еще класс элементам sidebar-menu-item <li>, которые являются основными пунктами меню. |
Decode,
Удалила, изменила, класс добавила, толку ноль. Скрипт не работает, может конфликтует? Вижу, что по идее работает. Стрелки еще неверно отображаются. Не судьба мне видимо верстку на логику натянуть... |
SnezhanaLast, я сразу не посмотрел, оказывается у вас там 2 элемента с классом page-sidebar-menu.
В скрипте измените первую строку на: var menu = document.querySelectorAll('.page-sidebar-menu')[1] |
Decode,
С наступившим новым годом Вас! Изменила, все осталось по прежнему. :( |
SnezhanaLast, спасибо, Вас тоже с Новым годом!
В консоли ошибка, надо запятую поставить после этой строки: var menu = document.querySelectorAll('.page-sidebar-menu')[1] |
Decode,
Поставила, все так же.( |
SnezhanaLast, вам надо со стилями разобраться. Если убрать эти два селектора, то работает.
.page-sidebar-menu.page-sidebar-menu-active-submenu li .sub-menu { display: none; width: 194px; z-index: 2000; position: absolute; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; } .page-sidebar .page-sidebar-menu .sub-menu, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu { list-style: none; display: none; padding: 0; margin: 8px 0 8px 0; } |
Часовой пояс GMT +3, время: 21:54. |