Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Срабатывание скрипта в разные моменты при загрузки в разных браузерах (https://javascript.ru/forum/css-html/24238-srabatyvanie-skripta-v-raznye-momenty-pri-zagruzki-v-raznykh-brauzerakh.html)

VitalikPro 22.12.2011 15:19

Срабатывание скрипта в разные моменты при загрузки в разных браузерах
 
При загрузке, у меня выполняется скрипт. Который ровняет по высоте 2 колонки.

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>

function setEqualHeight(columns)
{
var tallestcolumn = 0;
columns.each(
function()
{
currentHeight = $(this).height();
if(currentHeight > tallestcolumn)
{
tallestcolumn = currentHeight;
}
}
);
columns.height(tallestcolumn);
}


Для срабатывания данного скрипта вызываю функцию

setEqualHeight($("#main, #block_right"));


Где
#main
#block_right
id элементов которые мне нужно выровнять. Тут все хорошо срабатывает.

Но при загрузки галереи картинки подгружаются некоторое время.
Если вставить setEqualHeight в раздел

$(document).ready(function () {

});


То скрипт срабатывает где то по середине, устанавливая высоту, а картинки продолжают грузиться.

Вставляю в
window.onload = function(){
setEqualHeight($("#main, #block_right"));
}


Но вот незадача, данная конструкция работает в конце загрузки только в браузере chrom. Во всех остальных срабатывает на середине загрузки и происходит выше описанный эффект.

Для срабатывания в IE(и по идее остальных браузерах) функцию setEqualHeight необходимо поместить в низ страницы.

Но если оставить все как есть, то при загрузке в chrom скрипт в низу страницы срабатывает очень рано, и опять вызывает нарушение верстки.

Что бы это исключить, я определяю является ли браузер chrom.
Вот этой строкой.
/chrome/.test(navigator.userAgent.toLowerCase())

Которая выдает false или true.

Таким образом у меня получается.

//в начале страницы
window.onload = function(){
if (/chrome/.test(navigator.userAgent.toLowerCase())) {
setEqualHeight($("#main, #block_right"));
}
}  

//в конце страницы
if (!/chrome/.test(navigator.userAgent.toLowerCase())) {
setEqualHeight($("#main, #block_right"));
}


Проверял в браузерах
chrome - работает
EI - работает
FireFox - работает через раз. Возникает преждевременное срабатывание(верстка разезжаеться). Не часто, редко. Понят в какой момент не могу.
Opera - работает аналогично FireFox.

Для загрузки картиной ещё используется.
Colorbox и Lazyload.

Подскажите, как доработать для работы в FireFox, Opera.
А по существу считаю, что слишком много нагородил. Может кто то подскажет решение проще.

dmitriymar 22.12.2011 17:12

Невозможно отследить полную загрузку картинок в прелоад массив а также на страницу-уже сработало событие онлоад страницы, а картинки могут ещё грузиться.
Но, можно отследить непосредственно загрузку каждого изображения на страницу.
То есть каждой картинке обработчик онлоад, в обработчике счётчик,как только все загружены -менять высоту

trikadin 22.12.2011 17:17

Цитата:

Сообщение от dmitriymar
уже сработало событие онлоад страницы, а картинки могут ещё грузиться.

А какого фига? Я ошибаюсь, или onload обязано дожидаться загрузки всего, нет?

dmitriymar 22.12.2011 17:44

Цитата:

Сообщение от trikadin
А какого фига? Я ошибаюсь, или onload обязано дожидаться загрузки всего, нет?

попробуй)) была задача и была проблема что оnload не отслеживает загрузку прелоада.

Насколько я понимаю onload отслеживает создание dom,но не отслеживает полную загрузку всех его элементов

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

Nekromancer 22.12.2011 17:52

trikadin,
Ну загрузка изображений из скрипта не влияет на window.onload, точно так как динамические теги скрипт.
Надо просто подгружать самому и проверять подгрузку тоже самому.
Если я конечно правильно понял проблему.

trikadin 22.12.2011 17:58

Цитата:

Сообщение от Nekromancer
Ну загрузка изображений из скрипта не влияет на window.onload

Да я ступил чё-то. Тут речь о динамической загрузке, а я про нормальную подумал...

VitalikPro 23.12.2011 14:24

Я так понимаю вопрос остался открытым.

На данные момент реализацию сделал на CSS. Но пожертвовал удобством генерации страниц. Приходиться кое что догружать и просчитывать.

То есть. Мне нужно как то определить, загрузилась картинка или нет. Проверить статус картинки, это возможно сделать?

trikadin 23.12.2011 20:22

image.onload= function(){}

ksa 23.12.2011 21:41

Цитата:

Сообщение от VitalikPro
у меня выполняется скрипт. Который ровняет по высоте 2 колонки

А разметкой и ЦССом "равнять" не получается?

VitalikPro 29.12.2011 15:02

Спасибо trikadin, за подсказку. Вполне рабочий вариант. Например можно отслеживать высоту картинки. Если все отлично от 0, можно вызывать функцию и ровнять колонки.
Я не стал применять. Картинки могут грузиться неравномерно, поэтому отслеживать придется все, а эта ресурсоемко.
Оставил вариант с CSS, изменив немного первоначальную верстку страницы.
Но кому то может пригодиться. Спасибо всем за помощь.


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