Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Прелоад изображений (https://javascript.ru/forum/misc/10571-preload-izobrazhenijj.html)

Papa 10.07.2010 01:51

Прелоад изображений
 
можно ли сделать прелоадер изображений без добавления их в документ как узлов.. т.е.
var img = document.createElement('img');
без document.body.appendChild(img);

вариант первый, проверять свойство img.complete в цикле, работает только в мозилле (хотя раньше использовал, а что в других браузерах неработает заметил тока щасс)

второй вариант img.onload неработает вроди нигде

Octane 10.07.2010 02:01

А чем они в документе помешали?

Papa 10.07.2010 02:09

их в документе нет изначально, они создаються потом вставляються в документ, просто в ie при динамической вставке картинки сначала показывает битое изображение пока не загрузиться, ну и для других действий типа анимации надо дождаться полной загрузки. Из ответа следует что надо обязательно вставить в документ, visibility:hidden или opacity:0 или куданибудь где невидно, только потом можно проверять onload или complete? может еще както можно? заранее спасиб за ответ

Octane 10.07.2010 02:11

Цитата:

Сообщение от Papa
ставить в документ, visibility:hidden или opacity:0 или куданибудь где невидно, только потом можно проверять onload или complete?

Да. Обычно, просто задают отрицательные координаты.

Papa 10.07.2010 02:25

"Обычно, просто задают отрицательные координаты." я раньше так и делал, но потом опять создавал document.createElement('img'); чтобы вставить в нужное место, но вот заметил что ie заного грузить пытаеться, следущий вопрос написал немного раннее, там какраз это описано..

еще вопросик, вот странно, когда я загружаю таким способом правильным, т.е. вставляю в документ,
var img = document.createElement('img');
img.onload = func;
img.src = 'src';
document.body.appendChild(img);


но пока я вставил картинку в левое место, чтобы просто проверить на загрузку

потом убежден что она уже прокеширована браузером опять:
var img = document.createElement('img');
нужный_элемент.appendChild(img);

експлорер все равно показывает битую картинку сначало)

значит для оптимальyого варианта нужно этот этот узел из document.body с помощь cloneNode копировать

или прокатит вот так?
var img = document.createElement('img');
img.onload = function () {нужный_элемент.appendChild(img);};
img.src = 'src';
document.body.appendChild(img);

Octane 10.07.2010 02:30

Цитата:

Сообщение от Papa
var img = document.createElement('img');
нужный_элемент.appendChild(img);


експлорер все равно показывает битую картинку сначало)

Вы по событию img.onload выполняете нужный_элемент.appendChild(img)? Может быть размеры картинки пересчитываются? Попробуйте задать атрибуты width и height.


Цитата:

Сообщение от Papa
узел из document.body с помощь cloneNode копировать

appendChild умеет перемещать элемент, если тот уже был в дереве.

Papa 10.07.2010 02:33

у меня по свойству complete проверялось, размеры картинки не пересчитываються, вобщем я понял что для норм загрузки нужно либо вставлять в нужный элемент и делать невидимым, или перемещать по дереву в нужное место после загрузки, но не создавать заново эту картинку с помощью document.createElement.. пасибо


Часовой пояс GMT +3, время: 00:02.