Я пишу Javascript, щоб змінити розмір великого зображення, щоб він помістився у вікно браузера користувача. (На жаль, я не контролюю розмір вихідних зображень.)
Отже, щось подібне буде в HTML:
<img id="photo"
src="a_really_big_file.jpg"
alt="this is some alt text"
title="this is some title text" />
Чи можу я визначити, чи було завантажено srcзображення в imgтегу?
Мені це потрібно, оскільки я стикаюся з проблемою, якщо $(document).ready()вона виконується до того, як браузер завантажив зображення. $("#photo").width()і $("#photo").height()поверне розмір заповнювача (текст заміщення). У моєму випадку це щось на зразок 134 х 20.
Зараз я просто перевіряю, чи висота фотографії не перевищує 150, і припускаю, що якщо так, то це просто текст заміщення. Але це цілком зламано, і це може зламатися, якщо фотографія має менше 150 пікселів заввишки (не ймовірно в моєму конкретному випадку), або якщо альтернативний текст має висоту більше 150 пікселів (можливо, це може статися у маленькому вікні браузера) .
Редагувати: Для тих, хто хоче бачити код:
$(function()
{
var REAL_WIDTH = $("#photo").width();
var REAL_HEIGHT = $("#photo").height();
$(window).resize(adjust_photo_size);
adjust_photo_size();
function adjust_photo_size()
{
if(REAL_HEIGHT < 150)
{
REAL_WIDTH = $("#photo").width();
REAL_HEIGHT = $("#photo").height();
if(REAL_HEIGHT < 150)
{
//image not loaded.. try again in a quarter-second
setTimeout(adjust_photo_size, 250);
return;
}
}
var new_width = . . . ;
var new_height = . . . ;
$("#photo").width(Math.round(new_width));
$("#photo").height(Math.round(new_height));
}
});
Оновлення : Дякуємо за пропозиції. Існує ризик того, що подія не буде запущена, якщо я встановлю для неї зворотний виклик $("#photo").load, тому я визначив подію onLoad безпосередньо на тезі зображення. Для запису, ось код, з яким я в підсумку пішов:
<img id="photo"
onload="photoLoaded();"
src="a_really_big_file.jpg"
alt="this is some alt text"
title="this is some title text" />
Потім у Javascript:
//This must be outside $() because it may get called first
var isPhotoLoaded = false;
function photoLoaded()
{
isPhotoLoaded = true;
}
$(function()
{
//Hides scrollbars, so we can resize properly. Set with JS instead of
// CSS so that page doesn't break with JS disabled.
$("body").css("overflow", "hidden");
var REAL_WIDTH = -1;
var REAL_HEIGHT = -1;
$(window).resize(adjust_photo_size);
adjust_photo_size();
function adjust_photo_size()
{
if(!isPhotoLoaded)
{
//image not loaded.. try again in a quarter-second
setTimeout(adjust_photo_size, 250);
return;
}
else if(REAL_WIDTH < 0)
{
//first time in this function since photo loaded
REAL_WIDTH = $("#photo").width();
REAL_HEIGHT = $("#photo").height();
}
var new_width = . . . ;
var new_height = . . . ;
$("#photo").width(Math.round(new_width));
$("#photo").height(Math.round(new_height));
}
});
max-widthтаmax-heightстилем зображення за допомогою Javascript? Потім ви уникаєте ВСЕГО коду, який вам потрібно було написати, встановивши максимальну ширину / висоту до розміру ширини / висоти вікна перегляду.