Все, что мне нужно сделать, это найти изображение в центре его родительского div.
Во-первых, я попробовал это.Javascript/jQuery: Как обнаружить img полностью загружен или нет?
$(document).ready(function() {
$('#image1').css({
'top': 50%, 'left': 50%,
'margin-top': (-$('#image1').height()/2) + 'px',
'margin-left': (-$('#image1').width()/2) + 'px'
});
});
Это не удалось причиной $ ('# image1'). Высота() и ширину() дает 0 до его полной загрузки.
Таким образом, я попытался продолжить просмотр размера изображения, пока он не будет иметь определенную ширину и высоту.
как,
function inspectSize() { return ($('#image1').width() != 0); }
function setPosition() {
if(!inspectSize()) {
setTimeout(setPosition, 1000);
return;
}
$('#image1').css({
'top': 50%, 'left': 50%,
'margin-top': (-$('#image1').height()/2) + 'px',
'margin-left': (-$('#image1').width()/2) + 'px'
});
}
$(document).ready(setPosition);
Тем не менее он не работает.
, потому что $ ('# изображение'). Ширина() возвращает 28px, прежде чем он будет загружен в IE8 (кстати, IE7 был штраф)
Так что я, наконец, попытался waitForImages jQuery plugin , как это,
$(document).ready(function() {
$('#image1').waitForImages(function() {
setPosition(); // without inspectSize()
});
});
Он отлично работает с кешированными изображениями, но не работает с не кэшированными изображениями.
Функция вызывается до Image1 имеет ширину и высоту.
Что мне делать?
thanx :) Кстати это кросс-браузерное решение? – Sang
Да 'load' будет поддерживаться хотя бы IE6 + в соответствии с [совместимостью браузера jQuery] (http://docs.jquery.com/Browser_Compatibility). PS, не забудьте отметить это как ответ, если он действительно ответил на ваш вопрос :) – isNaN1247
@Sang. Проблема с использованием .load() после того, как изображение уже загрузилось, состоит в том, что оно уже завершено, а затем вы не получит событие загрузки. Итак, если вы собираетесь это сделать, сначала нужно проверить, загружена ли она, и, только если она еще не загружена, вы можете присоединить событие загрузки. Помните, что изображения в кеше браузера могут загружаться очень быстро (гораздо быстрее, чем изображения, поступающие с веб-сервера). Итак, этот ответ (и все остальные, которые просто рекомендуют .load(), не являются полным решением). – jfriend00