Preload

4 отговора 96 прегледа
#1

Preload

Направил съм си страничка с JavaScript preload на картинка като целта е тя да се показва след като се зареди изцяло. Това става с onload и работи. Но искам да си правя reload на картинката през известно време и тук се получават два проблема. Onload в body мога да използвам само веднъж. Мога да си рефрешвам цялата страница, но в паузата екрана ще остава празен. Чета src-то в променлива и после я пращам в document.ime.src, но последното прехвърляне не става след прочитането на цялата картинка, а още докато става зареждането, вследствие на което ефекта се губи и на екрана се вижда как картинката се зарежда. Това е единия проблем, а другия е, че картинката се кешира на всички възможни места, а на мен ми трябва всеки път да се чете отначало. Пробвах различни начини, включително и да добавям автоматично след името '?' с различни допълнителни случайни числа, но като че ли това пак не работи както трябва (а нямам грешки в кода).
Имам и трети допълнителен въпрос за още по-напреднали: ако времето на refresh-а е по-малко от времето за което картинката се download-ва, тогава refresh-а така и няма да проработи. Има ли решение и на този проблем? Както и на първите два?

Отговор
в отговор на AV #2

Re: Preload

Честно казано не можах добре да вдяна какво точно искаш да направиш и защо деа го правиш с рефреш? Ако искаш да сменяш картинката през определено време /*нещо като ротиращ банер?*/, просто използвай setTimeOut() от жаваскрипт. А за да не ти се зареждат картинките докато тече този интервал - защото това винаги може да бъде по-бавно - те се дефинират като обекти в началото на скрипта, който извикваш при онЛоад.

var img1=new Image;
var img2=new Image;
и т.н.

А на шапките среден ще покажа,
лятото съм пак на плажа, ъъъъ
из поезията на Жоро Б


--
The#Project - вече изцяло на български
Отговор
в отговор на voyager #3

Re: Preload

Идеята е, че картинката е само една (като име на файл), но самата тя ще се променя на сървъра начесто през определено време, следователно не мога да направя preload предварително и после да ползвам onload. По-конкретно има ли алтернатива на onload, която да ползвам и да се извършва определено действие след проверка дали дадената картинка се е заредила?

Отговор
в отговор на AV #4

Re: Preload

значи, ако тоя път съм разбрал правилно /*сутрин малко трудно вдявам ;)*/, ето отговори:

1. Няма стандартна проверка дали е лоаднат някакъв елемент, онлоад е евент единствено на обекта боди.
2. На твоя проблем виждам само едно поносимо решение:
- за да използваш евент онлоад, вкарваш картинката в друг хтмл, който набутваш на желаното място с <iframe>. Там си правиш скрипта с рефрешването
- за да не ти кешира картинките в документа с картинката /*а може да се наложи и в главния документ /*хтмл файл*/ , набутваш следните редове в хедъра:
Това е сървърният вариант /*както разбирам, използваш сървърно програмиране - това тука е ПХП, но има еквивалент в жава/жсп, а със сигурност трябва да има и в АСП*/
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header ("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); // always modified
header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header ("Pragma: no-cache"); // HTTP/1.0

Ако греша, че имаш достъп до сървър, мисля че това е ХТМЛ еквивалентът:
<meta http-equiv="expires" content="Mon, 26 Jul 1997 05:00:00 GMT">
<meta http-equiv="last-modified" content="tuka ne znam">
<meta http-equiv="cash-control" content="no cache">
<neta name="pragma" content="no cache">

--
The#Project - вече изцяло на български
Отговор
в отговор на voyager #5

Re: Preload

Мерси, аз още снощи се сетих как евентуално може да стане и имах предвид фреймове. Не знам обект в iframe дали може да се извиква от основното ХТМЛ, но би трябвало при два нормални фрейма (единия невидим, който да се рефрешва) и с онлоад да се прехвърля картинката във втория фрейм? Защото ако ХТМЛ-то в твоя iframe се рефрешва пак ще има момент, когато на екрана няма да има никаква картинка.

Сървърно програмиране няма да използвам, а и не предпочитам, пък и на картинката малко по-трудно ще стане добавянето не хедърите. Ще доопитам варианта с цифрите след въпроса, защото това би трябвало да означава всеки път различно име за сървърите, макар че предпочитам файла да е винаги с едно име, но без хедъри май няма как това да стане. Имаш грешки в последните 3 meta тага (ако някой друг реши да ги използва).

В JavaScript за съжаление няма еквивалент на хедърите, де да имаше.

Отговор