Всем привет!
Работаю над сайтом. Любительским. Написал простенькую фотогаллерею на js и css
http://lestnicca.ru/kvartirnik3
При нажатии на любое фото всплывает его увеличенная копия. И уже в этом всплывающем окне есть появляющиеся при наведении на определенный сектор элементы навигации. Щелкаешь и функция меняет url картинки вот таким образом (в упрощенном виде):
function plus() {
document.photo.src="Адрес нового изображения";}
Но, пока браузер не загрузит новое изображение, старое он не убирает. У пользователя возникает непонимание. Я щелкаю, а ничего не происходит. А если инет медленный, то ждать надо несколько секунд. Именно для этого встала задача при клике по элементам навигации показывать пользователю заранее загруженную гифку-прелоадер. Но все оказалось не так просто.
Сейчас такая гифка отображается, но мне не нравится та реализация, которую я нашел. Вот код:
function plus() {
document.photo.src="адрес анимации загрузки";
setTimeout('document.photo.src="адрес нового изображения",1); }
То есть предварительно загружаем гифку. Потом при щелчке меняем наше изображение на гиф на 1 милисекунду. Через 1мс меняем адрес на адрес нужного изображения. Если оно еще не загрузилось, то гифка так и останется висеть до его полной загрузки.
Решение вроде бы как решение, но у меня возникло с ним 2 проблемы.
1. Проблема позиционирования гиф. Ширина поля не фиксированная и зависит от размера фото. Так надо. Но гифка маленькая и при отображении ее поле сворачивается. Ну, эту проблему, теоретически можно решить если заморочиться и задать функции кроме адреса изображения менять на 1мс еще и свойства css. Отцентровать как-нибудь. Наверное это можно.
2. Даже если фото загружено, гифка все равно вылезает. На доли секунды, но ее видно. Задержка в 1мс на практике не выполняется. И тут уже ничего не поделаешь.
А теперь внимание, уважаемые знатоки - вопрос и суть задачи.
Идеальный вариант - это заранее загрузить гифку и задать ей display:none, позиционировать ее с помощью absolute в процентах. Она будет стоять по центру ну или в другом месте, там где я захочу. Прямо поверх предыдущей картинки. Это решит первую проблему. Но как менять свойство display, ТОЛЬКО если картинка еще не загружена и отключать его когда она загрузилась? Пробовал через событие onload как самый очевидный вариант, а не тут-то было. У кого есть какие решения? Поделитесь плиз.