Прокрутка всплывающего окна с правильным закрытием
Хочу продолжить эту тему:
Прокрутка всплывающего окна У автора вышло попап окно как в вк (http://vk.com/yeremyan?z=video135551...deos1355510 0), но с закрытием при клике на любом месте. А мне крайне нужно реализовать полноценный вариант - с закрытием только по клику на оверлее, но не на самом окне. Ход мыслей: Попытка 1. Структура HTML такая: <div class="preload_overlay"></div> <div class="popup_preload"> content </div> <a href="#" class="popup_preload_ref">Open popup</a> Код:
.popup_preload { $('.popup_preload_ref').click(function(){ $('.popup_preload, .preload_overlay').css('display', 'block'); $("#outer").css("position","fixed"); setTimeout(function(){ $(".popup_preload").css('display', 'block'); }, 300); }); $('.preload_overlay').click(function(){ $('.popup_preload').fadeOut(300); setTimeout(function(){ $(".preload_overlay").css('display', 'none'); $("#outer").css("position","static"); }, 300); }); Результат: Попап появляется, при нажатии на оверлей - закрывается, при клике на само окно событя не происходят. Проблема: Но нет прокрутки попапа! Попытка 2. Упрощенная структура контакта: <div class="popup_preload_outer"> <div class="preload_overlay"></div> <div class="popup_preload_inner"> <div class="popup_preload"> content </div> </div> </div> Код:
.popup_preload_inner { $('.popup_preload_ref').click(function(){ $('.popup_preload_outer, .preload_overlay').css('display', 'block'); $("#outer").css("position","fixed"); setTimeout(function(){ $(".popup_preload").css('display', 'block'); }, 300); }); $('.preload_overlay').click(function(){ $('.popup_preload').fadeOut(300); setTimeout(function(){ $(".preload_overlay, .popup_preload_outer").css('display', 'none'); $("#outer").css("position","static"); }, 300); }); Результат: Попап прокручивается точно как в ВК. Проблема: Попап не закрывается по клику на оверлее, кроме клика по области над попапом - там оверлей выглядывает из-под div.popup_preload_inner. И в этой точке я застрял. Нащупывал пока два возможных варианта, но оба кривоватые: Вариант 1. Задать div.popup_preload float: left - тогда клик на оверлее срабатывает, а на самом окне нет, т.е. все ок. Проблема: Попап улетел влево и не знаю как его отцентрировать. Вариант 2. Справа и слева от div.popup_preload добавить по невидимому блоку, задать им и окну попап float: left и повесить на них закрывающий ивент: <div class="popup_closer"></div> <div class="popup_preload"> content </div> <div class="popup_closer"></div> Проблема: усложнение HTML-структуры, при масштабировании ширина невидимок не подгоняется и не покрывают всего оверлея. Вроде можно решить при помощи https://github.com/yonran/detect-zoom/ но как-то громоздко. Пардон за кучу текста, если надо постараюсь уточнить! |
Как полезно изложить мысли - сразу придумалось.
Float: left в Вариант 1 убирал высоту у .popup_preload_inner и этим давал доступ к оверлею, который был под ним. Вместо этого добавляем width: 985px; margin: 0 auto; к .popup_preload_inner. И все фурычит:dance: |
Часовой пояс GMT +3, время: 19:36. |