Image()

 
0
 
JavaScript
ava
Sheff | 05.01.2004, 02:49
Народ, нужна помощь и срочно. Допустим у меня есть код:

var img = new Image();
img.src = "http://путь_к_файлу";

Так вот, как мне дождаться полной загрузки этого файла ? Т.е я хочу после
img.src = "http://путь_к_файлу";
написать цикл, что-то вроде

while (картинка_не_загружена)
{
//Ничего не делать
}
//Загрузилась! Теперь сделать то-то

Есть у Image() какое-нить свойство, которое содержит его состояние ? Или может как-нить по другому это всё можно реализовать ? Предлагайте, буду рад любым советам
Ответы (17)
ava
Sardar | 05.01.2004, 03:25 #
while(!img.complete){

}

Также есть свойство: readyState.
А еще лучше продолжать загрузку и переписать img.onload=function в которой и сделаешь то, что тебе нужно.

for(i in object) {
document.write("object."+i+"="+object[i]+"\n<br>");
}

Решит многие вопросы :)

ava
Sheff | 06.01.2004, 01:34 #
Спасибо, попробую =)
ava
Sheff | 06.01.2004, 14:59 #
Мда, получилось, но не совсем, дело в том что:

while(!img.complete){

}

Тормозит браузер и не даёт картинке загрузится, я вообще вот что делаю, ставлю event handler:

window.attachEvent?window.attachEvent("onbeforeunload",setCookies):void(0);

Функция setCookies() у меня вызывается всякий раз когда юзер выходит с текущего URL'а либо закрывает окно, мне нужно, чтобы в функции setCookies() всё что пользователь ввёл в полях формы текущего URL'а посылалось на сервак, для этот я формирую запрос типа:
save.php?name0=firstname&value0=Stas&name1=lastname&value1=Vorobiov
Затем, чтобы пользователь ничего не увидел, что типа посылается инфа, я делаю так:
Цитата


img = new Image();

img.src = [мой_запрос];


Так вот дальше нужно подождать, пока запрос уйдёт на сервер и потом уже можно окно закрывать, переходить на другой URL т.д. Так вот в чём вопрос, как же подождать. while'ом не получается, я уже сказал почему, как же быть ?
ava
Sardar | 06.01.2004, 16:07 #
По моему все происходит при закрытии окна, то есть уже не важен результат.
Можно сделать такой "запрос" и банально подождать 3 секунды на то что бы он дошел. На серваке если используется PHP установишь ignore_user_abort(true) и сделаешь что надо.

[q]Затем, чтобы пользователь ничего не увидел, что типа посылается инфа...[/q]
"Пользователь" может не понять smile
Может лучше кнопку сделать со строкой процесса?
ava
Sheff | 06.01.2004, 16:51 #
А как банально подождать 3 секунды ? У меня была такая идея, но реализовать не получилось. Понимаешь в чём дело, после того как setCookies (функция, которая вызывается при событии onbeforeunload) завершит свою работу, окно закрывается => эти 3 секуды надо ждать так чтобы не выходить из этой функции, можно конечно:

d1 = new Date();
while (true)
{
d2 = new Date();
if (d2-d1) > чего-то, то break;
}

Но так не катит, т.к while тормозит всю страницу и => запросы не шлёт и вообще ничего не делает, полный halt
Как же это реализовать, чтобы браузер "банально" ждал 3 секунды ?
ava
Secandr | 06.01.2004, 16:58 #
Sheff в JS была хорошая функция timer, может она тебе пригодится?
ava
Sardar | 06.01.2004, 18:44 #
Цитата
Но так не катит, т.к while тормозит всю страницу и => запросы не шлёт и вообще ничего не делает, полный halt


Наверное браузер перед закрытием окна уже не хочет что либо грузить, т.к. это уже не надо.
Самая здоровая реакция браузера, если это IE то радует что здесь они не сглупили.

Может все же лучше сделать кнопку или работать не из предсмертного события smile.
ava
Sheff | 07.01.2004, 18:10 #
Secandr timer не катит, ведь он работает через определённый интервал времени, а как только функция завершается уже не важно что там выполянется по setTimeout.
Sardar
Цитата
Наверное браузер перед закрытием окна уже не хочет что либо грузить

Нет, это не так, он всё прекрасно грузит, проверял так:

img.src = ...
alert(img.complete);
alert('wait');
alert(img.complete);

В первый раз он вывел false, а во второй раз (я подождал перед тем как кликать на 'Ok' диалога со строкой 'wait') - true.
Так что, то что я хочу сделать можно, но как, этот вопрос всё ещё не решён...
ava
guest | 07.01.2004, 22:58 #
[I]Добрый день, я рискую дать недельный совет, но сталкивался с похожей проблемой, как я знаю, пока в JS не выполнится до конца функция, браузер ни к чему другому не приступает (крутится внутри цикла), другими словами, браузер не хочет ничего делать
параллельно с операцией в цикле. Но, вообще, браузер много чего делает параллельно... если пока не доступна одна часть документа, грузит другую и т.д. Следовательно, внутри цикла while можно попытаться задать такой процесс, который браузер согласен выполнять параллельно с загрузкой рисунка - это должна быть не комманда JS, а, например, загрузка ещё чего-то. Не уверен, что сработает, но вот простой пример:

скрипт загружает последовательные числа в окно, потом рисунок (любой), затем должен менять его, но не поменяет, хотя команда уже дана, пока не - там есть комментарий

<script TYPE="text/javascript"><!--
for(i=0;i<=3000;i++){
document.write(i,"; ");
if(i==100){document.write("<img src='C:/1.jpg' name=ty>"); }
if(i==1800)alert("готовность");
if(i==1802)document.images[0].src="C:/2.jpg";
// пока не появится окно, рисунок не перезагрузится, если комп. быстрый, числа
//можно увеличить чтобы было заметно ожидание
if(i==2990)alert("ожидание");
/* это ещё не конец загрузки чисел в окно, следовательно, цикл не закончен
но параллельно с выводом окошка "ожидание" браузер согласен перезагрузить рисунок */
/* я во всём этом не уверен , у меня именно так работает*/
if (i==3000)alert("3000");
}
--></SCRIPT>
ava
Sheff | 08.01.2004, 02:22 #
Непрофессионал, ты абсолютно прав, я тож делал что-то похожее, но вот только alert меня не устраивает, т.к я не хочу, чтобы пользователь что-нить видел, вот если-б что-нить другое грузить, но только вот что. Было бы неплохо, если бы в JavaScript'е было б что-то типа VB'шного DoEvents, в VB если вставить DoEvents в цикл, то паралелльно с циклом выполняются другие события, но в JS я ничего похожего не знаю =(
ava
guest | 08.01.2004, 11:26 #
У меня получилось и вот так:

<script TYPE="text/javascript"><!--
document.bgColor="#feffff";
for(i=0;i<=8000;i++){
document.write(i,"; ");
if(i==100){document.write("<img src='C:/1.jpg'>"); }
if(i==1800)alert("готовность");
if(i==1802)document.images[0].src="C:/2.jpg";
// пока не изменится фон, рисунок не перезагрузится, если комп. быстрый, числа
//можно увеличить чтобы было заметно ожидание
if(i==2990)document.bgColor="#ffffff";
/* это ещё не конец загрузки чисел в окно, следовательно, цикл не закончен
но параллельно с изменением фона(!!!!) браузер согласен перезагрузить рисунок */

if (i==8000)alert("8000");
}
--></SCRIPT>


вместо alert меняем фон, думаю, много ещё чего подойдёт, числа я в цикле увеличил, чтобы видно было

забыл сказать - всё это у меня работает в MSIE 5.5. Опера скрипт не поняла (где-то есть ошибка, видимо или у меня или в Опере)
ava
Sheff | 08.01.2004, 21:50 #
Непрофессионал, а у меня не получилось, но я писал вот что:
Цитата


img = new Image();

img.src = 'http://...';

while (true)

{
  if (img.complete) break;
  document.bgColor="#ffffff";

}

ava
guest | 09.01.2004, 12:12 #
Я догадываюсь, в чём дело. А оно может быть в том, что загрузка файла (признание его complete) это дело не браузера а ОС, виндовс или что там... Потому речь должна идти о многозадачности (параллельности) не на уровне ИЭ, а на уровне ОС. Потому оно и работает с alert, что прорисовка окна - дело ОС (стандартная функция операционной системы), а при изменении фона браузер сам рисует в собственном окне, не затрагивая ОС. Гипотеза - нужно найти такое действие вместо alert, которое, давало бы новую задачу ОС. Тут трудно предположить, что это может быть, я не настолько опытен - изменение размеров окна, создание нового, изменение размеров фрейма (на 1 пиксел) или что-то подобное, таких функция я не знаю
Я проверял, идёт ли запрос на сервер во время работы цикла, идёт, дело только в том, чтобы закончить цикл...
ava
Sheff | 09.01.2004, 20:35 #
Цитата
Я проверял, идёт ли запрос на сервер во время работы цикла, идёт

Уже хорошо, значит дело тока в этом грёбаном цикле, но как его закончить так чтобы без лишней фигни, не знаю, надо думать и много и не знаю можно ли вообще что-то придумать...
ava
guest | 09.01.2004, 21:24 #
Не знаю, не подскажу, кроме последней моей гипотезы ничего в голову не приходит
ava
guest | 11.01.2004, 00:32 #
Может быть, что функции работы со временем (таймер или что там...) подойдут - запустить несколько раз в цикле вместо alert - время то системное
ava
linlin110119110 | 08.05.2018, 09:19 #
mt0508
http://www.coach-factoryoutletonline.us.org
http://www.ralphlaurensale-clearance.me.uk
http://www.airmax-97.us
http://www.oakleysunglasses-outlet.name
http://www.toryburchoutletonline.com.co
http://www.coachfactory-outletstore.us.com
http://www.michael-korsoutlet.ca
http://www.michaelkors-outlet.ca
http://www.moncleroutlet.me.uk
http://www.adidas-superstar.us.com
http://www.canadagoosejacket.com.co
http://www.pandoracharmssale-clearance.us.com
http://www.adidas.us.com
http://www.hermesbag.us.com
http://www.cheapjordans.us.com
http://www.coachoutletcanada.ca
http://www.michaelkors-outlet.in.net
http://www.pandorajewelryoutlet.in.net
http://www.yeezyboost.us.com
http://www.raybansunglasses.net.co
http://www.montblanc-pens.us.org
http://www.cheapjordan-shoes.in.net
http://www.jordanretro.name
http://www.newbalance-outlet.us.com
http://www.adidasshoe.us.com
http://www.suprashoes.us.org
http://www.mulberryoutlet.org.uk
http://www.mbtshoessale.us.com
http://www.christianlouboutinshoesuk.org.uk
http://www.coach-outletonline.eu.com
http://www.nike-store.us.com
http://www.ralphlaurenoutletsonline.us.com
http://www.michaelkors-outlet.com.co
http://www.pandora-jewelryoutlet.us.com
http://www.moncleroutlets.us.org
http://www.ralph-laurenoutlet.com.co
http://www.canada-goose-jackets.ca
http://www.pumashoesoutlet.us.com
http://www.ralphlaurensaleclearanceuk.me.uk
http://wwwcanadagoose-uk.com.co
http://www.air-max2018.us.com
http://www.jewelleryscharm.com
http://www.uggsaustralia.fr
http://www.cheapmlbjerseyschina.us.com
http://www.cheapjordans-shoes.us.com
http://www.fitflops-saleclearance.us.org
http://www.michaelkorsoutlets.us.com
http://www.christianlouboutinshoes.us.org
http://www.canadagoosejackets.net.co
http://www.vuittonlouis.us.com
http://www.cheapmlbjerseys-wholesale.us.com
http://www.oakley.nom.co
http://www.harden-vol1.com
http://www.outletmichaelkors.us.com
http://www.adidas-outlet.us.com
http://www.pandoracharms.us.com
http://www.louisvuitton-outlet.us.com
http://www.katespadeoutletstoreonline.us.com
http://www.longchampoutletus.us.com
http://www.nike-huarache.in.net
http://www.pandoracharms.com.co
http://www.jacketscanadagoose.org.uk
http://www.fitflopssale.us.com
http://www.coachcanadaoutlet.ca
http://www.uggbootssales.us.com
http://www.nmd-adidas.us.com
http://www.eccoshoesstore.us.com
http://www.guccioutlets.us.org
http://www.reebokshoes.us.org
http://www.mulberry-bags.me.uk
http://www.michaelkorsfactoryoutletsale.us.com
http://www.supreme-clothing.us.com
http://www.ferragamo-outlet.us.com
http://www.coachfactory-outletonline.us.org
http://www.hermesbirkin.in.net
http://www.ugg.net.co
http://www.uggsoutletstoress.us.com
http://www.michaelkorsoutletshopping.us.com
http://www.adidasyeezyboost-350.us.com
http://www.michael-korsoutlets.eu.com
http://www.birkenstocks.us
http://www.cheapjordanshoes.in.net
http://www.coachoutletonlinecoachfactoryoutlet.us.com
http://www.adidasnmd-shoes.us
http://www.airmax2019.us.com
http://www.oakleysunglasses-wholesales.us.com
http://www.abercrombieand-fitch.ca
http://www.jordansshoes.us.com
http://www.coachoutletmalls.us.com
http://www.jordanshoesforsale.us.com
http://www.coachfactoryoutlet-online.in.net
http://www.yeezyboost-350.us.com
http://www.kobeshoes.cc
http://www.christianlouboutinoutlet.us
http://www.nikefreerun.name
http://www.adidasnmdr1.us.com
http://www.canadagooseukjackets.org.uk
http://www.oakley--sunglasses.us.org
http://www.coachfactory-outlet.us.com
http://www.coachfactory-outlet.in.net
http://www.timberland-outlets.us
http://www.air-max90.org.uk
http://www.katespadehandbags.us.com
http://www.moncler-outlets.us.com
http://www.katespadeoutletclearance.us.com
http://www.adidasoriginals.in.net
http://www.burberry-outlet-canada.ca
http://www.cheapnfljerseysofficial.us.com
http://www.tiffany-andcooutlet.us.com
http://www.birkenstockoutlets.us.org
http://www.pandoracharms.name
http://www.monclerjacketsuk.com.co
http://www.fitflopssaleuk.me.uk
http://www.burberryoutlet.in.net
http://www.uggsoutletofficials.us.com
http://www.toryburch-outletonline.in.net
http://www.airjordanshoes.in.net
http://www.louboutinshoesuk.org.uk
http://www.coachoutlet-onlinesale.us.com
http://www.rolexreplica-watches.us.com
http://www.fitflopssale-clearance.us.org
http://www.birkenstocksandalsuk.co.uk
http://www.raybansunglassessalecheap.us.com
http://www.katespade.in.net
http://www.polooutlet.in.net
http://www.uggsoutlet-clearance.us.com
http://www.ugg-boots.net.co
http://wwwcanadagoose-jacketsuk.com.co
http://www.coach-outlets.us.com
http://www.canadagooseoutlet.net.co
http://www.outlettoms.org
http://www.kobebryantshoes.name
http://www.adidas-shoes.us.com
http://www.nikeairmax.in.net
http://www.pandorajewelryus.us.com
http://www.hermes-handbags.us
http://www.coachoutletstore-online.us.com
http://www.nikeoutletshoes.us.com
http://www.adidas-yeezyboost.us.com
http://www.airjordans.us.com
http://www.canadagoosejacketssale.com.co
http://www.skechersshoes-outlet.us.com
http://www.salvatoreferragamoshoes.us.com
http://www.northface-jackets.us.com
http://www.michael-korsoutlets.us.com
http://www.asicsshoes-outlet.us.com
http://www.outletpandora.us.com
http://www.guccihandbagsoutlet.in.net
http://www.cheapjordans.in.net
http://www.red-bottoms.us.com
http://www.poloralphlaurenoutlet.in.net
http://www.vans-shoesoutlet.us.com
http://www.pandora-outlet.us.com
http://www.cheapoakleysunglasses.com.co
http://www.michaelkorshandbags.eu.com
http://www.cheapuggs.net.co
http://www.coachfactoryonlineoutlet.com.co
http://www.cheapoakleysunglassesofficial.us.com
http://www.pandoracharms-uk.org.uk
http://www.philippplein-outlet.com
http://www.monclerjacketsoutlet.in.net
http://www.adadassuperstar.com
http://www.supremeclothing.org.uk
http://www.outletcoachoutlet.us.com
http://www.coach-outletonlines.us.com
http://www.canadagooseoutletjackets.com.co
http://www.jordanshoes.in.net
http://www.nikeoutlet.us.com
http://www.redbottomsshoes.us.com
http://www.pandora.us.com
http://www.airmax-97.us.com
http://www.rolex-replicawatches.com.co
http://www.vuitton-louis.us.com
http://www.coachfactoryoutlet-storeonline.us.com
http://www.pandorajewelry.in.net
http://www.longchamp-outlet.us.com
http://www.michaelkors-outlets.ca
http://www.katespadeoutletonline.in.net
http://www.raybansunglasses.name
http://www.uggs.net.co
http://www.kate-spade.us.com
http://www.michael-korsoutlet.in.net
http://www.coach-factoryoutletsonline.us.com
http://www.polo-ralphlauren.in.net
http://www.coachoutletstoreonline.com.co
http://www.ultraboost.us
http://www.2017nikeairmax.us
http://www.valentino-shoes.us.com
http://www.moncler-outlet.us.org
http://www.pradaoutlets.us.com
http://www.valentinoshoesoutlets.us.com
http://www.ralphlauren-outlet.me.uk
http://www.cheapnfljerseysnflwholesale.us.com
http://www.katespadeoutlet.us.org
http://www.raybanssunglasseses.us.com
http://www.poloralphlaurenoutletpolo.us.com
http://www.mcm-outlet.us.org
http://www.kevindurantshoes.name
http://www.outletlouisvuitton.us.com
http://www.coachoutletus.us.com
http://www.converseshoes-outlet.us.com
http://www.ralph-laurenoutlet.org.uk
http://www.philipppleinshirt.com
http://www.adidascampusshoes.us
http://www.canadagoose-outlet.name
http://www.canadagoosesaleoutlet.us.com
http://www.katespadehandbagsclearance.us.com
http://www.cheapjordans.com.co
http://www.coachoutletonlinestore.in.net
http://www.timberland-boots.us.com
http://www.canadagoosejackets-outlet.us
http://www.coach-factory-outlet.us.org
http://www.cheapnbajerseys-wholesale.us.com
http://www.pandora-charms.us.org
http://www.cheapraybans.com.co
http://www.fredperrypoloshirts.in.net
http://www.yeezyboost.org.uk
http://www.adidasyeezyshoes.us.com
http://www.supremenewyork.us.com
http://www.ralph-laurenoutlet.us.org
http://www.thenorthfacejacketsoutlet.us.com
http://www.canadagooseoutletcheap.us.com
http://www.nikezoom.us
http://www.adidas-nmd.us.com
http://www.pandora-jewelrycanada.ca
http://www.monclerjacketssale.us.com
http://www.uggscanadaugg.ca
http://www.raybanssunglassesoutlet.us.com
http://www.tiffanyandcojewelry.in.net
http://www.coachoutletstoreonlineclearances.in.net
http://www.airmax90.org
http://www.timberlandbootsoutlet.us.com
http://www.ralphlauren.net.co
http://www.oakleysunglassessalecheap.us.com
http://www.michaelkorsoutletclearance.in.net
http://www.pandorajewelrypandora.us.com
http://www.yeezyboost-350.co.uk
http://www.nike-shoes.in.net
http://www.adidas-yeezyshoes.us.com
http://www.louboutinshoes.in.net
http://www.timberlandbootsoutlets.us.com
http://www.katespadeoutlet.in.net
http://www.burberry-outlet.name
http://www.hollisterclothingstore.in.net
http://www.okaleysunglasseses.us.com
http://www.ralphlauren.me.uk
http://www.toryburch-outletstores.us.com
http://www.todsoutlet.in.net
http://www.mbtshoes.name
http://www.nikeshoes.us.com
http://www.canadagoosesoutlet.ca
http://www.polo-outlet.in.net
http://www.adidasoutlet.us.com
http://www.suprashoes.name
http://www.air-jordans.us.com
http://www.nikeoutletonlinestore.us.com
http://www.moncleroutletonlines.us.com
http://www.canadagooseoutlet.name
http://www.hermes.us.org
http://www.airmax-2018.com
http://www.nikeshoes.in.net
http://www.fitflops-sale-clearance.us.com
http://www.outletcoachonline.us.com
http://www.michaelkorsoutletonlineclearance.in.net
http://www.supremeclothing.us.org
http://www.pandorastore.us.com
http://www.birkenstockshoesoutlet.us.com
http://www.outlettoms.us.com
http://www.nikeoutletonline.us.com
http://www.canadagoosejacketscoats.org.uk
http://www.oakleysunglassesforwomen.us.com
http://www.outletcoachstore.us.com
http://www.birkenstockoutletus.us.com
http://www.canadagoosesalejackets.us.com
http://www.airmaxoutletsaleus.com
mt0508
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить