Простейшее модальное окно jQuery+CSS

05.11.2016  16:43

Типовая задача - сделать всплывающее модальное окно. Погнали!

Яваскрипт (файл jquery.modalwindow.js, 2 Кб в несжатом виде):
jQuery.fn.modalwindow = function(options){
  var options = jQuery.extend({
    //height: '270', // высота всплывающего окна
    //width: '690', // ширина всплывающего окна
    title: '' //заголовок всплывающего окна
  },options);
	this.makeCenter = function() {
            if (jQuery(this).height() <100) var a = ( (($(window).height() / 2) - ( 500 ) )) + ($(document).scrollTop());
			//else var a = ( (($(window).height() / 2) - ( (jQuery(this).height()) / 2 ) )) + ($(document).scrollTop());
			else var a = ($(document).scrollTop()) + 200;
            if (a<0)
                a = 0;
				//alert(($(window).height() / 2));
            jQuery(this).css ({
                top: a + 'px',
                //top: '165px',
                left: ( (($(window).width() / 2) - ( (jQuery(this).width()) / 2 ) )) + ($(document).scrollLeft()) + 'px'
            });
	};
        this.setTop = function (){
            jQuery(this).css ({
                top: ( (($(window).height() / 2) - ( (jQuery(this).height()) / 2 ) )) + ($(document).scrollTop()) + 'px'
            });
        };
        this.setParamsToOverflow = function(id) {
                $('#'+id+'_overflow').css({
                    height:$(document).height()+'px',
                    width:$(document).width()+'px'
                });
	};
	this.maintainPosition = function() {
		$(window).scroll( function() {
			this.makeCenter();
		} );
	}
	//________
	this.init = function() {
	var _id = jQuery(this).attr('id');
	//alert(_id);
            $(window).keypress(function(event) {
              if (event.keyCode == '27') {
                $('.'+_id+'_overflow').fadeOut("fast");
                $("."+_id).fadeOut("fast");
                //$("#"+_id).html('');
               }
            });
            //Изменение размеров главного окна
            $(window).resize(function() {
                _this.setParamsToOverflow(_id);
                _this.makeCenter();
            });
            /*$(window).scroll(function() {
                _this.setTop();
            });*/
            this.makeCenter();
	};
      return this.init();
};


вызов окна и остальное (в общем файле яваскриптов, например):
if (window.jQuery) {
$(document).ready(
  function()
  {
var wh = $(window).height();
var dh = $(document).height();
// подгон высоты подложки
if ($("#podlogka").length) {
	if ($("#podlogka").height() < dh) $("#podlogka").height(dh);
}
if ($("#podlogka").length) {if ($("#podlogka").height() < dh) $("#podlogka").height(dh + 25);}
$(".cities_list_lnk").live("click", function(){
	$(".emptyModalWindow").fadeIn("fast");
	$('.new_window_empty').modalwindow();
	// у меня внутреннее содержимое модального окна заполняется из переменной html, следующую строку можно прибить, тогда содержимое окна будет таким, как пропишете в html
		$('.emptyModalWindow .c').html(html);
		$('.emptyModalWindow').fadeIn("slow");
		$('.new_window_empty').modalwindow();
	return false;
});
//закрытие окна
$(".close_window, #podlogka").click(function(){
	if ($(this).parent().parent().is(".hidden")) $(this).parent().parent().fadeOut("fast");
	return false;
});
});
}


скрипт модернизируем под ваши задачи.

Стили:
#podlogka{position: absolute;z-index: 8888;background-color:#000000;top:0px;left:0px;display: block;ms-filter: 'Alpha(Opacity=50)';opacity: 0.5;-moz-opacity: 0.5;filter:
alpha(opacity=50);-khtml-opacity: 0.5;/*height:11000px;*/overflow:hidden;/*height:100%;*/min-height:100%;width:100%;}
.new_window{position: absolute;z-index: 9000;display: block;background-color: #FFF;border-bottom: 1px solid #a3a3a4;/*margin-top:30%;margin-left:30%;*/background: #fff url(/img/new_window_bg.png) 0px 0px repeat-x;
-webkit-box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.53);
-moz-box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.53);
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.53);
behavior: url(/js/PIE.htc);
}
.new_window .c{padding:26px;padding-top: 45px;}
.new_window .close_window{position: absolute;background: url(/img/sprite.png) -102px 0px no-repeat;width:17px;height:17px;right: 16px;top:10px;}
.new_window .rc{float:right;width:272px;margin-left:33px;}
.new_window .lc{float:left;width:305px;border-right:1px solid #efefef;}
.new_window .inner ul {padding:0px; margin:0px;}
.new_window .inner ul li {padding:0px; margin:0px; list-style-type:none; width:33%; position:relative; float:left; min-width:100px; line-height:26px;}
.new_window .inner ul li a {color:#666; font-size:16px;}

html:
<div class="hidden emptyModalWindow new_window3_overflow">
<div id="podlogka" class="podlogka"></div>
<div id="new_window3" class="new_window_empty new_window">
<a href="#" class="close_window"></a>
<div class="c"></div>
</div>
</div>

И не забудьте пару картинок: подложка, крестик и спрайт.
Всё!
Андрей Панёвин
Здравствуйте! Я — Андрей Панёвин и занимаюсь профессиональной разработкой сайтов на платформе 1С-Битрикс (исключительно программирование). Есть вопросы по статье? Могу подсказать и помочь по скайпу (andrey.panevin.ru), WhatsApp (+7-911-091-0670) или перепиской в ВК.
1000 р./час.



перейти в Блог | Блог (стр. 7)

Ударим лайками по бездорожью, разгильдяйству и бюрократизму!


Ключевые слова (тэги): CSS 3  HTML 4  jQuery 19  web-программирование 84  молодым домохозяйкам 44  

Вам есть что сказать — ну я же чую.
Высказаться о наболевшем, я выслушаю:
Имя


email (не публикуется)