Наткнулся на проблему при использовании плагина для jQuery lightbox 0.5. В Opera 11.00 - при нажатии на ссылку, которая должна отобразить фотографию, открывался оверлей, но фотография не отображалась. Если закрыть оверлей и снова нажать на туже ссылку, то фотография отображалась нормально.
Начал копаться в коде lightbox. Выяснил, что проблема в том, что в функции _set_image_to_view() из файла jquery.lightbox-0.5.js устанавливается обработчик события onload на объект Image, внутри обработчика выполняется отображение фотографии:
Поскольку в других браузерах все работало отлично, понял, что проблема в Opera. Погуглив нашел несколько постов в форумах на эту тему:
// Image preload process
var objImagePreloader = new Image();
objImagePreloader.onload = function () {
$('#lightbox-image').attr('src', settings.imageArray[settings.activeImage][0]);
// Perfomance an effect in the image container resizing it
_resize_container_image_box(objImagePreloader.width, objImagePreloader.height);
// clear onLoad, IE behaves irratically with animated gifs otherwise
objImagePreloader.onload = function () { };
};
objImagePreloader.src = settings.imageArray[settings.activeImage][0];
добавил:
if (window.opera) {
var ver = window.opera.version();
if (ver == '11.00' || ver == '11.01' || ver == '7.50' || var == '7.54') {
___pause(1000);
objImagePreloader.onload();
}
}
Функция ___pause определена в файле jquery.lightbox-0.5.js. Значение задержки надо подобрать в зависимости от скорости загрузки фотографий. В общем 100% результат не гарантирован, т.к. скорость загрузки всегда разная.
Решение не очень красивое, но другого не придумал :)
Начал копаться в коде lightbox. Выяснил, что проблема в том, что в функции _set_image_to_view() из файла jquery.lightbox-0.5.js устанавливается обработчик события onload на объект Image, внутри обработчика выполняется отображение фотографии:
objImagePreloader.onload = function () {Но после загрузки фотографии обработчик onload не запускается.
$('#lightbox-image').attr('src', settings.imageArray[settings.activeImage][0]);
// Perfomance an effect in the image container resizing it
_resize_container_image_box(objImagePreloader.width, objImagePreloader.height);
// clear onLoad, IE behaves irratically with animated gifs otherwise
objImagePreloader.onload = function () { };
};
Поскольку в других браузерах все работало отлично, понял, что проблема в Opera. Погуглив нашел несколько постов в форумах на эту тему:
- http://bytes.com/topic/javascript/answers/151218-opera-image-object-onload - пост от 2005 года, тут пишут об этой проблеме в Opera 7.54 на Linux и Opera 7.50 на Windows XP;
- http://my.opera.com/community/forums/topic.dml?id=880632 - пост от 16.01.2011, пишут, что проблема в Opera 11.00 и 11.01.
// Image preload process
var objImagePreloader = new Image();
objImagePreloader.onload = function () {
$('#lightbox-image').attr('src', settings.imageArray[settings.activeImage][0]);
// Perfomance an effect in the image container resizing it
_resize_container_image_box(objImagePreloader.width, objImagePreloader.height);
// clear onLoad, IE behaves irratically with animated gifs otherwise
objImagePreloader.onload = function () { };
};
objImagePreloader.src = settings.imageArray[settings.activeImage][0];
добавил:
if (window.opera) {
var ver = window.opera.version();
if (ver == '11.00' || ver == '11.01' || ver == '7.50' || var == '7.54') {
___pause(1000);
objImagePreloader.onload();
}
}
Функция ___pause определена в файле jquery.lightbox-0.5.js. Значение задержки надо подобрать в зависимости от скорости загрузки фотографий. В общем 100% результат не гарантирован, т.к. скорость загрузки всегда разная.
Решение не очень красивое, но другого не придумал :)
Комментариев нет :
Отправить комментарий