Перейти к публикации

Скрипт модального окна


Рекомендованные сообщения

Всем доброго дня!

Нужна помощь. Если кто может, то пожалуйста.

Есть скрипт модального окна. Он открывает одно окно по классу. Как его переделать, чтобы он открывал любое кол-во окон по ссылке <a href id..., присвоив персональный id каждому окну? А также использовать одну подложку для всех окон. Если кто может, помогите пожалуйста.


function Modal(modalEl, overlayEl) {

		  this.modal = $(modalEl);

		  this.overlay = $(overlayEl);

		  this.wWidth = $(window).width();

		  this.wHeight = $(window).height();

		  this.dHeight = $(document).height();

	    }

	    Modal.prototype = {

		  init: function(){

		    this.bindHandlers();

		  },

		  bindHandlers: function(){

		    var self = this;

		    $('.modal-link').on('click', function(){

			  self.showModal();

		    });

		    $(window)

			  .resize(function() {

			    self.setWinSize($(this));

			    self.setModalPosition();

			 })

			   .scroll(function() {

			    self.setWinSize($(this));

			    self.setModalPosition();

			 });

		    $('.close-button').click(function(){

			  self.hideModal();

		    });

		  },

		  showModal: function(){

		    this.overlay.fadeIn();

		    this.modal.fadeIn();

		    this.setModalPosition();

		  },

		  hideModal: function(){

		    this.overlay.fadeOut();

		    this.modal.fadeOut();

		  },

		  setModalPosition: function(){

		    var modalHeight = this.modal.outerHeight(),

			    modalWidth = this.modal.outerWidth(),

			    scrollTop = $(window).scrollTop();

		    if(this.wHeight < modalHeight){

			  this.modal.css('top', scrollTop);

		    } else {

			  this.modal.css('top', this.centerVertically(this.wHeight,modalHeight,scrollTop));

		    }

		    if(this.wWidth < modalWidth){

			  this.modal.css('left', 0);

		    } else {

			  this.modal.css('left', this.centerHorizontally(this.wWidth,modalWidth));

		    }

		  },

		  centerVertically: function(w, m, scroll){

		    return ((w - m)/2 + scroll);

		  },

		  centerHorizontally: function(w, m){

		    return (w - m)/2;

		  },

		  setWinSize:function(win){

		    this.wWidth = win.width();

		    this.wHeight = win.height();

		  }

	    }


	  $(document).ready(function(){

	    var modal = new Modal($('.modal-window'), $('.modal-overlay'));

	    modal.init();

	  });


<p class="modal-link">Открыть окно</p>

<div class="modal-overlay">

  <div class="modal-window">

    <p>содержимое</p>

    <button class="close">Close</button>

  </div>

</div>

Ссылка на сообщение
Поделиться на других сайтах

LADYX, так себе скрипт... Используй лучше модальные окна от jqueryui, тем более они уже подключены в dle по умолчанию (http://jqueryui.com/dialog/)

Ссылка на сообщение
Поделиться на других сайтах

odys, jqueryui я знаю конечно, но это не то что нужно. А этот скрипт мне как раз подходит в идеале под то, что сейчас делаю.

Ссылка на сообщение
Поделиться на других сайтах

LADYX, я конечно не очень понимаю может кто отпишется, кто больше соображает, у себя в проекте, из-за не знаний, сделал так:

$("[role=open_form]").click(function() {

    $(".overlayer").show();

    $(".loginform").animate({

	  "height": "show", "opacity": "show"

    }, { duration: "slow" });

    $("body").addClass("overlayered");

    return false;

});


$("[role=close_form]").click(function() {

    $(".overlayer").hide();

    $(".loginform").hide();

    $("body").removeClass("overlayered");

});

Это по сути тоже самое модальное окно, с оверлеем и анимацией открытия.

И собственно сидеть и париться не видел смысла :)

а всё, что делает твой скрипт с размером, можно и самому через .css задать

Ссылка на сообщение
Поделиться на других сайтах

odys, в том скрипте функция скролла по вертикали меня устраивает, да и для каждого окна можно свой стиль задать.

Но в любом случае спасибо за советы)

Ссылка на сообщение
Поделиться на других сайтах

LADYX, я так понимаю, что там скролл убирается?

Если да, то и у меня он убирается, правда через css, для этого и скрипт добавляет для body класс overlayered, а при нажатии кнопки закрыть, убирает этот класс

Ссылка на сообщение
Поделиться на других сайтах

я так понимаю, что там скролл убирается?

да, а на его месте появляется скролл в случае, если окно по высоте объемное. И центрирование у него удачно выполнено, и без лишнего css с паддингами да маргинами отрицательными, да процентами. И никаких "блямканий" нет, например, при скролле, как это часто бывает у большинства подобных скриптов. Вообще, скрипт очень интересный, я многие уже перебрал, и в основном где-то что не устраивает, а этот вот меня заинтересовал. По крайней мере, минусов в нем не заметил. Может быть я чего-то не понимаю, но как-то так :)

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...