Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.04.2014, 13:32
Интересующийся
Отправить личное сообщение для Ilya_Nsk Посмотреть профиль Найти все сообщения от Ilya_Nsk
 
Регистрация: 07.02.2014
Сообщений: 11

Как отцентровать динамический DIV
Поиск что-то не дал результата.. может не то искал и не там..
Помогите, пожалуйста.
Есть html-страничка, на ней пустой див c opacity=0, в который JS-скриптом по $(document).ready загружаю из нескольких (кол-во заранее неизвестно, определяю ПХП-скриптом, возвращаю в JS) файлов текст. В цикле c помощью jquery генерирую параграфы и заполняю текстом.
$('#main_div').append('<p id=para_'+i'></p>'); $('#para_'+i).load('file_'+i);

После цикла центрирую див (готовой функцией с просторов инета)
$('main_div').css(..top: ($(window).height-$('#main_div').outerHeight)/2 ..)
и проявляю (animate opacity), но он получается намного ниже чем надо, т.к. после заполнения высота diva равна количеству файлов умноженному на высоту шрифта параграфа из css, а ведь текст из файла может занять не одну строку. Отсюда вопрос, как сделать, что бы div возник, пусть не плавно, но по центру?
p.s. Запускал функцию центровки с задержкой на 3 сек - нормально центрует, но это некрасиво: в углу появляется текст, потом скачет в центр. Похоже, что .load реально не вставляет данные, а только ставит "галочку", вставка происходит при отрисовке.
Ответить с цитированием
  #2 (permalink)  
Старый 16.04.2014, 14:35
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

$('#main_div').css('top', Math.round(($(window).height()-$('#main_div').outerHeight())/2)+'px' );

Ну и центрировать и отображать div надо уже после того как все данных загрузятся, а это происходит не мгновенно и load запускается асинхронно. Как вариант в каллбек к load прописать нужную функцию. Если делается много load'ов, то либо центрировать после каждой успешной загрузки, но див будет скакать, либо дождаться завершения всех и только потом центрировать и отображать. Синхронизировать можно через промисы или если известно количество load то просто завести счетчик загрузок и выполнять каллбек когда счетчик достигнет нужного значения.

Последний раз редактировалось jsnb, 16.04.2014 в 14:38.
Ответить с цитированием
  #3 (permalink)  
Старый 16.04.2014, 23:15
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Ilya_Nsk, http://bit.ly/1jLblgR
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #4 (permalink)  
Старый 17.04.2014, 11:02
Интересующийся
Отправить личное сообщение для Ilya_Nsk Посмотреть профиль Найти все сообщения от Ilya_Nsk
 
Регистрация: 07.02.2014
Сообщений: 11

jsnb,
спасибо! Отлично сработало предложение с применением callback-функции. Т.к. цикл for, то вызвать load с ней в последней итерации не составило труда. (пример функции что бы не замусоривать топик не копипастил целиком, а так, набросал "выдирку" по памяти.. дырявой слегка )
а cyberу - НЕ спасибо

Последний раз редактировалось Ilya_Nsk, 17.04.2014 в 11:10.
Ответить с цитированием
  #5 (permalink)  
Старый 17.04.2014, 13:19
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Сообщение от Ilya_Nsk Посмотреть сообщение
Т.к. цикл for, то вызвать load с ней в последней итерации не составило труда.
Это может работать неправильно т.к. никто не гарантирует, что load запущенный на последней итерации и завершится последним. Может предыдущий запрос будет выполняться дольше и к моменту завершения последнего load не все данные подгрузятся, и поэтому центрирование будет расчитано по уже имеющимся данным и при подгрузки других данных див съедет. Лучше всё-таки вешать каллбеки на все load и считать сколько фактически подгрузилось и когда счетчик будет равен общему количеству запросов уже центрировать и выводить див.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как прописать динамический IP-адрес в файле .htaccess на примере кода: mvi10 Серверные языки и технологии 2 12.04.2014 22:55
как можно сделать reload div qwertycal Общие вопросы Javascript 5 03.02.2013 20:32
Как побороть "активированный" DIV? XPyCTang Events/DOM/Window 1 21.11.2012 13:01
Как переписать div по клику по нему Lewik Общие вопросы Javascript 3 08.05.2012 22:27
jquery maxImage, как поместить бэкграунд в div? dplz jQuery 4 10.07.2010 14:09