Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Google Chrome переставляет элементы после события onload (https://javascript.ru/forum/events/34205-google-chrome-perestavlyaet-ehlementy-posle-sobytiya-onload.html)

w1cked 24.12.2012 14:01

Google Chrome переставляет элементы после события onload
 
Привет!

Хочу разобраться с событиями.

Есть 3 блочных элемента. 2 сверху, 1 под ними.

Я хочу изменить ширину нижнего элемента по ширине 2х верхних.

blank.style.width=triangle_right.offsetLeft-triangle_left.offsetLeft-triangle_left.offsetWidth+"px";


blank - нижний
triangle_left и triangle_right - верхние

Есть браузер Google Chrome, который переставляет triangle_right влево на 200пх после события window.onload.

Библиотеку jQuery использовать не хочу. Потому что это - слишком простая задача.

Вопрос: какое событие возникает, когда браузер завершает переставлять элементы после загрузки страницы?

Других скриптов нет.

Ниже оффтопик/что сделано:
По событию onresize проблемы нет.
В других браузерах проблемы нет.
Добавление задержки в 100мс устраняет проблему на моем компе.

w1cked 24.12.2012 15:40

http://jsfiddle.net/kEauw/4/

На jsfiddle не воспроизводится, т.к. страница большая и проходит больше 100мс до выполнения скрипта.

Пока пытался воспроизвести, нашел источник проблемы.

Как дождаться загрузки шрифтов?

w1cked 25.12.2012 07:34

Проблема в некорректном, с точки зрения учебников, поведении Google Chrome.

Я написал такой код, который воспроизводит проблему.

<html>
<head>
<style>
@font-face {
  font-family: 'Philosopher';
  font-style: normal;
  font-weight: 400;
  src: url([url]http://themes.googleusercontent.com/static/fonts/philosopher/v4/OttjxgcoEsufOGSINYBGLWOb2gHztoQeulij-[/url]
1lvl-8.woff) format('woff');
}
body {
        font-family: Philosopher;
        font-size: 20px;
}
</style>
<script>
window.onload=function(){console.log('onload event -- '+document.getElementById("a").offsetWidth);}
window.setTimeout('console.log("timeout 10 event -- "+document.getElementById("a").offsetWidth)',10);
window.setTimeout('console.log("timeout 100 event -- "+document.getElementById("a").offsetWidth)',100);
</script>
</head>
<body>
<span id="a">qwe qwe qwe qwe</span>
</body>
</html>


Вывод этого скрипта:

onload event -- 186
timeout 10 event -- 186
timeout 100 event -- 159

И нашел другие разговоры о ней тут http://productforums.google.com/foru...me/7VIpByhmU3U

По-прежнему прошу помочь разобраться в том, как правильно написать обработчик события - аналог onload без jQuery и других библиотек.


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