Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.12.2012, 18:25
Новичок на форуме
Отправить личное сообщение для komissarov Посмотреть профиль Найти все сообщения от komissarov
 
Регистрация: 05.12.2012
Сообщений: 3

Визуализация загрузки изображения
Всем привет!

Работаю над сайтом. Любительским. Написал простенькую фотогаллерею на 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 как самый очевидный вариант, а не тут-то было. У кого есть какие решения? Поделитесь плиз.

Последний раз редактировалось komissarov, 05.12.2012 в 18:43.
Ответить с цитированием
  #2 (permalink)  
Старый 05.12.2012, 18:49
Новичок на форуме
Отправить личное сообщение для ponomarchik Посмотреть профиль Найти все сообщения от ponomarchik
 
Регистрация: 05.12.2012
Сообщений: 7

Для предварительной загрузки изображений:

jQuery.preloadImages = function() 
{
 for(var i = 0; i<arguments.length; i++) 
 {
  jQuery("<img>").attr("src", arguments[i]);
 }
};


далее вызываем нашу функцию и в качестве параметров передаем ей путь
до вашей гифки.

т.е.
$.preloadImages("image1.gif"", "path/image3.jpg");
Ответить с цитированием
  #3 (permalink)  
Старый 05.12.2012, 19:12
Новичок на форуме
Отправить личное сообщение для komissarov Посмотреть профиль Найти все сообщения от komissarov
 
Регистрация: 05.12.2012
Сообщений: 3

Никогда не имел дело с jQuery и с трудом представляю как это работает. Это мне нужно библиотеки подключать или как? Я не шарю, простите за нубство
Ответить с цитированием
  #4 (permalink)  
Старый 05.12.2012, 19:26
Новичок на форуме
Отправить личное сообщение для ponomarchik Посмотреть профиль Найти все сообщения от ponomarchik
 
Регистрация: 05.12.2012
Сообщений: 7

здесь скачайте последнюю версию библиотеки:
http://jquery.com/download/
далее в header подключите ее:

<script type="text/javascript" src="путь/библиотека.js"></script>

там же определите функцию
<script type="text/javascript" >
         тут
         </script>

далее либо в хедере либо в конце разметки, перед </body> вставьте
$.preloadImages("image1.gif"", "path/image3.jpg");

незабываем обрамлять js-код тегами
<script type="text/javascript" >
  </script>
Ответить с цитированием
  #5 (permalink)  
Старый 05.12.2012, 19:43
Новичок на форуме
Отправить личное сообщение для komissarov Посмотреть профиль Найти все сообщения от komissarov
 
Регистрация: 05.12.2012
Сообщений: 3

Вставил в хэддер. Ничего не изменилось. Что я делаю неправильно? Если можно, гляньте код? http://lestnicca.ru/kvartirnik3
Ответить с цитированием
  #6 (permalink)  
Старый 05.12.2012, 19:54
Новичок на форуме
Отправить личное сообщение для ponomarchik Посмотреть профиль Найти все сообщения от ponomarchik
 
Регистрация: 05.12.2012
Сообщений: 7

забыли указать атрибут type="text/javascript" , где вызываете ф-ю
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прогресс загрузки большого изображения или файла - как сделать Почемучкин Events/DOM/Window 7 19.10.2012 21:03
Ожидание загрузки изображения oleg_pantyukhin AJAX и COMET 4 15.10.2012 20:33
Loader на время загрузки изображения shilinpavel Javascript под браузер 2 26.05.2012 09:32
Loader на время загрузки изображения shilinpavel Javascript под браузер 0 21.05.2012 17:38
Помогите пожалуйста с обьяснением загрузки изображения на сервер. 0931454574 Серверные языки и технологии 3 11.05.2011 18:05