Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Модальное окно (https://javascript.ru/forum/jquery/34727-modalnoe-okno.html)

jeysmook 16.01.2013 18:30

Модальное окно
 
Не срабатывает проверка высоты контента окна, то есть когда кликаешь первый раз на ссылку, то проверка не выполняется, а когда кликаешь второй раз, то проверка выполняется, что делать? Спасибо.

Вот эта проверка
if($('.window').height()+60>=$(window).height()){			
               $('body').css({
				'overflow':'hidden',
				'padding-right':'17px',
		});
}


Вот полный код
$(function(){
	$.fn.window_open = function(title, param){		
		if(param == 'photo'){
			var id = $(this).attr('id'); id = id.substr(1);
			var content = '<img src="body/img/orig/'+id+'.jpg" />';
			title = title+' '+id+' из '+$('.text_article').children().length;
		}
		$('<div class="wrapper_window">'+
		  	'<div class="window">'+
				'<div class="header_window">'+
					'<div class="wrapper_window_close"><a href="" class="window_close">Закрыть</a></div>'+
					'<div class="title_window">'+title+'</div>'+								
				'</div>'+
				'<div class="clear"></div>'+
				'<div class="content_window">'+content+'</div>'+
			'</div>'+
		'</div>').prependTo('body');
		if($('.window').height()+60>=$(window).height()){			
			$('body').css({
				'overflow':'hidden',
				'padding-right':'17px',
			});
		}
	}
	$('a[name=window]').click(function(){
		$(this).window_open('Фото', 'photo');
		return false;
	});
	$('.window_close').live('click', function(){
		$('.wrapper_window').remove();
		$('body').css({
			'overflow':'auto',
			'padding-right':'0',
		});
		return false;
	});
});

Deff 16.01.2013 19:24

Цитата:

Сообщение от jeysmook
Не срабатывает проверка высоты контента окна, то есть когда кликаешь первый раз на ссылку, то проверка не выполняется, а когда кликаешь второй раз, то проверка выполняется, что делать? Спасибо.

Очевидно проверка делается одновременно при создании окна, а методы .height() ( и другие) работают после полной загрузки окна,
Либо делать проверки с задержкой( на время загрузки окна) по таймеру, либо дальнейшее продолжение функции(установкой ключа страбатывания) запускать по событию onload данного окна.

jeysmook 17.01.2013 13:59

Deff,
Не могли бы вы по подробней про второй способ рассказать?

Deff 17.01.2013 15:06

Цитата:

Сообщение от jeysmook
Не могли бы вы по подробней про второй способ рассказать?

var timerID_0;
clearTimeout(timerID_0);
timerID_0 = setTimeout(function(){
  		if($('.window').height()+60>=$(window).height()){			
			$('body').css({
				'overflow':'hidden',
				'padding-right':'17px',
			});
		}
}, 3000)

jeysmook 18.01.2013 14:57

Deff,
А нельзя чтобы не ждать три секунды? Возможно ли сделать такое без задержки.
А вот это окно работает нормально не могу понять, почему?
$('a[name=window]').click(function(){
		var id = $(this).attr('href');
		var content = $(id).html();
		var get_window = function(){
			var structure_window = 
							'<div class="window">'+
								'<div class="conteiner_content">'+
									'<div class="conteiner_info">'+
											'<a href="" class="close"></a>'+id+
									'</div>'+
									'<div class="content" style="display:block;">'+
										'<div>'+content+'</div>'+
									'</div>'+
								'</div>'+
							'</div>';
			return structure_window;
		}
		$('body').prepend(get_window());
		$('.window').fadeIn();
		if($('.conteiner_content').height()+60>=$(window).height()){
			$('body').css({'overflow':'hidden','padding-right':'17px'});
		} else{
			$('body').css({'overflow':'auto'});
		}
		return false;	
	});

Deff 18.01.2013 17:10

jeysmook,
Это окно работает нормально, поскольку нет новых загрузок фреймов, документов или Aякс подгрузок. Задержки и ожидания onload нужны тольк в таких случаях. При вариантах без них обычно достаточно
$(document).ready(function(){
  //Тут коды
});

jeysmook 19.01.2013 10:31

Deff,
спасибо кажется разобрался) Получилось вот так:
$('.content_window').children().load(function(){		
			if($('.window').height()+60>=$(window).height()){			
				$('body').css({
					'overflow':'hidden',
					'padding-right':'17px',
				});
			}
		});


Часовой пояс GMT +3, время: 21:17.