Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ожидание завершения выполнения функции JavaScript?
 
 автор: DIM@   (05.07.2008 в 06:09)   письмо автору
 
 

Доброго вреиени суточек!

Возникла проблема размещения скрытого блока <DIV> по центру экрана

function showCalendar(){
  currDate=new Date();
  Year=currDate.getYear();
  GetCalendar(Year);
  oDiv=document.getElementById('Calendar');
  oDiv.style.display = 'block';
  oDiv.style.left=((screen.width-oDiv.offsetWidth)/2-(document.all?screenLeft:screenX)+document.body.scrollLeft+30)+'px';
  oDiv.style.top= ((screen.height-oDiv.offsetHeight)/2-(document.all?screenTop:screenY)+document.body.scrollTop+30)+'px';
  return false;
}

Функция GetCalendar(Year) выполняет запрос и построение календаря через AJAX. Все прекрасно работает кроме одного, календарь при первом нажатии выводится не по центру.
Опытным путем выяснил, что все дело в том, что блоку <DIV> присваеваются координаты еще до завершения выполнения функции GetCalendar(Year).

проверял проблему так:


function showCalendar(){
  currDate=new Date();
  Year=currDate.getYear();
  GetCalendar(Year);
  oDiv=document.getElementById('Calendar');
  oDiv.style.display = 'block';
  oDiv.style.left=((screen.width-oDiv.offsetWidth)/2-(document.all?screenLeft:screenX)+document.body.scrollLeft+30)+'px';
  oDiv.style.top= ((screen.height-oDiv.offsetHeight)/2-(document.all?screenTop:screenY)+document.body.scrollTop+30)+'px';
  return false;
  alert(oDiv.offsetHeight);
  alert(oDiv.offsetHeight);
}

Первый раз alert выводит значение ширины DIV 19, второй раз 503. Вот такие траблы :(

Есть у кого какие варианты решения данной проблемы?

   
 
 автор: PAT   (05.07.2008 в 08:09)   письмо автору
 
   для: DIM@   (05.07.2008 в 06:09)
 

Вы не даёте времени парсеру на обработку полученной информации - отсюда и траблы.
----

Во-первых, задайте DIV'у начальный стиль visibility: hidden. Незачем юзеру наблюдать за процессом наполнения страницы.

Во-вторых, ограничьте функцию showCalendar () вызовом функции GetCalendar (Year).

В-третьих, в конце функции GetCalendar () пропишите вызов дополнительной функции, причём ОБЯЗАТЕЛЬНО вызывайте её через таймаут, пусть даже и нулевой, например, так: setTimeoyt (finalCalendar, 0).

Ну и, наконец, в функции finalCalendar () прописывайте новые размеры DIV'a - то, что у вас сейчас после вызова функции GetCalendar (Year) и не забудьте в самом конце этой функции сделать DIV видимым - style.visibility = 'visible';

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования