Срабатывание скрипта в разные моменты при загрузки в разных браузерах
При загрузке, у меня выполняется скрипт. Который ровняет по высоте 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. А по существу считаю, что слишком много нагородил. Может кто то подскажет решение проще. |
Невозможно отследить полную загрузку картинок в прелоад массив а также на страницу-уже сработало событие онлоад страницы, а картинки могут ещё грузиться.
Но, можно отследить непосредственно загрузку каждого изображения на страницу. То есть каждой картинке обработчик онлоад, в обработчике счётчик,как только все загружены -менять высоту |
Цитата:
|
Цитата:
Насколько я понимаю onload отслеживает создание dom,но не отслеживает полную загрузку всех его элементов таже фигня была и с картинками на странице(может сейчас профиксили). попробуй загрузить "тяжёлую" картинку и на оnload страницы -брось алерт.конечно скорость инета будет влиять,но результаты в разных браузерах тебя возможно и сейчас порадуют:) |
trikadin,
Ну загрузка изображений из скрипта не влияет на window.onload, точно так как динамические теги скрипт. Надо просто подгружать самому и проверять подгрузку тоже самому. Если я конечно правильно понял проблему. |
Цитата:
|
Я так понимаю вопрос остался открытым.
На данные момент реализацию сделал на CSS. Но пожертвовал удобством генерации страниц. Приходиться кое что догружать и просчитывать. То есть. Мне нужно как то определить, загрузилась картинка или нет. Проверить статус картинки, это возможно сделать? |
image.onload= function(){} |
Цитата:
|
Спасибо trikadin, за подсказку. Вполне рабочий вариант. Например можно отслеживать высоту картинки. Если все отлично от 0, можно вызывать функцию и ровнять колонки.
Я не стал применять. Картинки могут грузиться неравномерно, поэтому отслеживать придется все, а эта ресурсоемко. Оставил вариант с CSS, изменив немного первоначальную верстку страницы. Но кому то может пригодиться. Спасибо всем за помощь. |
Часовой пояс GMT +3, время: 00:11. |