Не всплывает окно при клике
|
Цитата:
<!DOCTYPE html> <html> <head> <meta http-equiv='Content-Type' content='text/html; charset=windows-1251' /> <!-- <script src='http://code.jquery.com/jquery-latest.js'></script> <script src="https://code.angularjs.org/1.3.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.3.9/angular-route.js"></script> --> <style type='text/css'> .features { width: 350px; margin: 0 auto; border-left: 1px solid gray; border-right: 1px solid gray; } .features li { border-top: 1px solid gray; } .features li:last-child { border-bottom: 1px solid gray; } .feature-name { font-size: 20px; padding: 10px 0; cursor: pointer; text-align: center; } .feature-name:hover { background-color: gray; color: #fff; -webkit-transition: 0.45s; transition: 0.45s; } .feature-wrapper { position: absolute; left: -9999px; top: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.7); cursor: default; visibility: hidden; } .feature-wrapper.visible { position: fixed; visibility: visible; left: 0; } .feature-description { position: relative; width: 500px; margin: 300px auto 0; padding: 20px; background-color: #fff; border-radius: 20px; text-align: center; } .feature-description .close { position: absolute; top: 10px; right: 13px; color: #6d6d6d; cursor: pointer; } ul { margin: 0; padding: 0; list-style-type: none; } </style> <script type='text/javascript'> </script> </head> <body> <ul class="features"> <li> <div class="feature-name">hash</div> <div class="feature-wrapper"> <div class="feature-description"> <!-- <div class="close">X</div>--> <h3>hash</h3> <p>часть URL содержащая якори</p> <p><i>location.hash</i></p> </div> </div> </li> <li> <div class="feature-name">search</div> <div class="feature-wrapper"> <div class="feature-description"> <!-- <div class="close">X</div>--> <h3>hash</h3> <p>часть URL содержащая якори</p> <p><i>location.hash</i></p> </div> </div> </li> </ul> <script type='text/javascript'> var features = document.querySelector('.features'); features.addEventListener('click', function(event) { var target = event.target; // var close = target.classList.contains('close'); // if (target.classList.contains('feature-description') && !close) break; while(target != features) { alert(target.classList.contains('feature-name')) if (target.classList.contains('feature-name')) { var o=target.querySelector('.feature-wrapper'); alert(o) o.classList.toggle('visible'); break; } } }); </script> </body> </html> |
yaparoff, как вариант...
<!DOCTYPE html> <html> <head> <meta http-equiv='Content-Type' content='text/html; charset=windows-1251' /> <!-- <script src='http://code.jquery.com/jquery-latest.js'></script> <script src="https://code.angularjs.org/1.3.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.3.9/angular-route.js"></script> --> <style type='text/css'> .features { width: 350px; margin: 0 auto; border-left: 1px solid gray; border-right: 1px solid gray; } .features li { border-top: 1px solid gray; } .features li:last-child { border-bottom: 1px solid gray; } .feature-name { font-size: 20px; padding: 10px 0; cursor: pointer; text-align: center; } .feature-name:hover { background-color: gray; color: #fff; -webkit-transition: 0.45s; transition: 0.45s; } .feature-wrapper { position: absolute; left: -9999px; top: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.7); cursor: default; visibility: hidden; } .feature-wrapper.visible { position: fixed; visibility: visible; left: 0; } .feature-description { position: relative; width: 500px; margin: 300px auto 0; padding: 20px; background-color: #fff; border-radius: 20px; text-align: center; } .feature-description .close { position: absolute; top: 10px; right: 13px; color: #6d6d6d; cursor: pointer; } ul { margin: 0; padding: 0; list-style-type: none; } </style> <script type='text/javascript'> </script> </head> <body> <ul class="features"> <li> <div class="feature-name">hash</div> <div class="feature-wrapper"> <div class="feature-description"> <h3>hash</h3> <p>часть URL содержащая якори</p> <p><i>location.hash</i></p> </div> </div> </li> <li> <div class="feature-name">search</div> <div class="feature-wrapper"> <div class="feature-description"> <h3>hash</h3> <p>часть URL содержащая якори</p> <p><i>location.hash</i></p> </div> </div> </li> </ul> <script type='text/javascript'> var features = document.querySelector('.features'); features.addEventListener('click', function(event) { var target = event.target; if (target != features) { if (target.classList.contains('feature-name')) { var o=target.nextSibling.nextSibling; if (o.classList.contains('feature-wrapper')) { o.classList.toggle('visible'); }; }; }; }); </script> </body> </html> |
ksa , спасибо!
А почему два раза nextSibling ? Т.е. сосед соседа? или что это означает? Надо сделать также, чтобы при нажатии на крестик и при нажатии вне всплывающего окна это окно закрывалось, т.е. убирался класс 'visible' Сделал что-то, но не работает http://codepen.io/anon/pen/jBoroM |
Цитата:
Первый сосед - текстовая нода... Второй - нужный тебе элемент. Цитата:
Вешаешь на него обработчик... Правильно находишь родительский элемент и убираешь ему класс. С кликом "вне окна" чуть сложнее. При открытии окна нужно добавить обработчик клина на весь документ... В том обработчике нужно смотреть не тот ли это элемент, который нужно закрыть... Если не тот - смотреть всех родителей, все старше и старше, проверяя "не тот ли это элемент, который нужно закрыть"... Если оного не нашлось - значит кликнули "мимо окна". :D И это окно нужно закрыть, предварительно удалив обработчик клика на документе... Есть еще вариант, со "шторой"... Если, перед открытием окна, весь экран перекрыть ДИВом-шторой (окно будет поверх шторы) - на него можно повесить обработчик, в котором и будет закрываться окно. Но "штора" не должна быть 100% прозрачной! Иначе не во всех браузерах будет отрабатываться клик на нем. |
Часовой пояс GMT +3, время: 05:29. |