Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Событие после рендеринга страницы (https://javascript.ru/forum/misc/28934-sobytie-posle-renderinga-stranicy.html)

beard 07.06.2012 16:49

Событие после рендеринга страницы
 
Есть очень большая таблица, мне нужно узнать ее ширину когда она отрендерится браузером.

Т.е. выходит такая ситуация сейчас:

загрузка...
window.onload (беру ширину - неправильная)
рендеринг где-то секунды 3(ширина правильная)

Как ее взять? Никаких afterRender событий или тп. не слышал (

beard 07.06.2012 18:14

Есть какие-то идеи?

Deff 07.06.2012 18:17

beard,
Ну такой ход к примеру
После таблы поставить однопиксельную прозрачку (display:block), по onload - чот делать ?

<img style="display:block" src="http://forum.mybb.ru/i/blank.gif" onload="Tst_Table"/>

Раед 07.06.2012 18:53

Цитата:

Сообщение от Deff
Ну такой ход к примеру
После таблы поставить однопиксельную прозрачку (display:block), по onload - чот делать ?

<img style="display:block" src="http://forum.mybb.ru/i/blank.gif" onload="Tst_Table"/>

Не вариант. window.onload происходит после загрузки всех имжей и оно не подходит.

beard, а это во всех браузерах при window.onload ширина неправильная?

beard 07.06.2012 19:04

Цитата:

Сообщение от Раед
beard, а это во всех браузерах при window.onload ширина неправильная?

не знаю, в хроме проверял, но скорее всего на всех.

Deff 07.06.2012 19:08

beard,
Картинка грузится после рендинга таблицы - нафига ждать window.onload ?

Раед 07.06.2012 19:12

Цитата:

Сообщение от Deff
Картинка грузится после рендинга таблицы - нафига ждать window.onload ?

Цитата:

Сообщение от beard
загрузка...
window.onload (беру ширину - неправильная)
рендеринг где-то секунды 3(ширина правильная)

Нужно не window.onload ждать, а чего то после window.onload.
Может requestAnimationFrame поможет

Deff 07.06.2012 19:20

Раед,
а чисто <body onload="alert('N')"> после таблы впихнуть ?
Вродь оно после рендинга ?

beard 07.06.2012 19:25

Цитата:

Сообщение от Раед
Нужно не window.onload ждать, а чего то после window.onload.

я это понимаю :)
Цитата:

Сообщение от Deff
beard,
Картинка грузится после рендинга таблицы - нафига ждать window.onload ?

извини чувак, спасибо за помощь, но этот способ не будет работать, так как даже window.onload срабатывает после загрузки всех картинок и этой в том числе:)

beard 07.06.2012 20:06

Цитата:

Сообщение от Раед
Может requestAnimationFrame поможет

реально работает в хроме тестил, но у меня две проблемы будут потом IE9, IE8 + я очкую штука настолько сырая и написано что еще в стадии разработки и могут ее убрать... а там все только как я понял с префиксами(
https://developer.mozilla.org/en/DOM...AnimationFrame

Реально стремно отвалиться или нет в дальнейшем)

oneguy 09.06.2012 16:53

Можно добавить <script> элемент после таблицы. Тогда он будет выполняться после рендеринга таблицы.

dmitriymar 09.06.2012 17:13

Цитата:

Сообщение от oneguy
Можно добавить <script> элемент после таблицы. Тогда он будет выполняться после рендеринга таблицы.

?? пока скрипт не загрузится не будет window.onload
а костыль -своё событие?
если нет поддержки requestAnimationFrame:
по онлоаду брать размеры таблицы.
потом по таймеру в проверять изменение размеров таблицы -если в течении н времени её размеры не менялись -значит она отрендерилась полностью-вызвать функцию на событие полного рендера.
можно по идее и размер страницы проверять -но,не во всех случаях подойдёт

Aetae 09.06.2012 19:40

Мб, как нормальные люди поступают в таких случаях, использовать table-layout:fixed?

oneguy 09.06.2012 20:09

Да, извиняюсь, window.onload выполняется в том числе после всего HTML кода.
Но в общем случае даже <script> элемент после таблицы должен выполняться после рендеринга таблицы. Раз автор написал, что это не так, то, возможно, таблица формируется при помощи асинхронных запросов или скриптов?

dmitriymar 09.06.2012 20:49

Событие онлоад -это событие полной загрузки документа.
Загрузка документа и построение вью это чуть разные вещи судя из учебников по css
Поэтому событие requestAnimationFrameсрабатывает после window.onload
Таблица же - неоднократно пересчитываться если не указанны фиксированные размеры. Поэтому событие онлоад не признак окончательного построения таблицы

oneguy 09.06.2012 22:36

Я правильно понял, что автор хочет выполнить что-то типа getComputedStyle(table).width чтобы узнать ширину таблицы. Может ли быть такое, что после срабатывания load в таблице used style ещё не вычислился?
Если я правильно понимаю, used values элементов полностью определяется структурой документа и подключенных CSS листов, поэтому пересчитывать used values имеет смысл только при изменении последних.
Я не знаю, сказано ли в спецификации о том, должны ли быть вычислены все used values к моменту события load.

nerv_ 10.06.2012 00:05

Цитата:

Сообщение от Aetae
Мб, как нормальные люди поступают в таких случаях, использовать table-layout:fixed?

)))


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