Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Как проверить загружено изображение или нет? (chuser)
Author Message
chuser
Заглянувший



Joined: 09 Oct 2007
Posts: 2
Карма: 0
   поощрить/наказать


PostPosted: Wed Oct 14, 2009 7:18 pm (написано за 2 секунды)
   Post subject: Как проверить загружено изображение или нет?
Reply with quote

Задача такая: при нажатии на ссылку должно открываться новое окно с изображением. При этом размер окна должен подгоняться под размер изображения. Функция new_win загружает картинку. Функция checkLoad проверяет, если картинка уже загружена, то открыть окно. Если не загружена, то вернуться к проверке. Т.е. используется рекурсия.
Проблема в том, что окно открывается только при повторном нажатии на ссылку. Потом, когда картинка уже в кэше все работает нормально. Почему при первом нажатии на ссылку рекурсия не работает? По идее функция checkLoad должна выполняться пока картинка не загрузится (условие if(myImage.complete)).


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>

<SCRIPT type="text/javascript" charset="utf-8">
function checkLoad(url, myImage){
  if(myImage.complete){
    var w = myImage.width;
    var h = myImage.height;
    var param = "width=" + w + ",height=" + h;
    newWin = window.open(url, "myWindow", param);}
  else{
    SetTimeout(checkLoad(url, myImage), 100);}
}
}
function new_win(url, img_url)
{
  var myImage = new Image();
  myImage.src = img_url;
  checkLoad(url, myImage);
}
</SCRIPT>
</head>

<body>
<a href="javascript:new_win('2.html', '1.jpg')">LINK</a>
</body>

</html>
Back to top
View user's profile Send private message
dimagolov
Участник форума



Joined: 04 Feb 2007
Posts: 1664
Карма: 96
   поощрить/наказать

Location: Christ Church, Barbados

PostPosted: Wed Oct 14, 2009 7:33 pm (спустя 14 минут; написано за 2 минуты 39 секунд)
   Post subject:
Reply with quote

оригинал темы (forum.woweb.ru/topic43287.html)
потому что во-первых не SetTimeout а setTimeout, а во-вторых, если надо передать параметры в ф-ю, вызываемую по setTimeout, то надо делать замыкание:
Code (php): скопировать код в буфер обмена
setTimeout(function() { checkLoad(url, myImage); }, 100);
ну и в-третьих, Вы запутались в фигурных скобках.
Back to top
View user's profile Send private message
chuser
Заглянувший



Joined: 09 Oct 2007
Posts: 2
Карма: 0
   поощрить/наказать


PostPosted: Wed Oct 14, 2009 8:27 pm (спустя 54 минуты; написано за 36 секунд)
   Post subject:
Reply with quote

To dimagolov, спасибо за помощь. Вы меня просто спасли. Задача решена.

Вопрос решен, тему можно закрыть.
Back to top
View user's profile Send private message
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Wed Oct 14, 2009 10:01 pm (спустя 1 час 33 минуты)
   Post subject:
Reply with quote


М

Тема закрыта.
Back to top
View user's profile Send private message Send e-mail
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Thu Oct 15, 2009 9:29 am (спустя 11 часов 28 минут; написано за 22 секунды)
   Post subject:
Reply with quote

Quote:
то надо делать замыкание:
или forum.dklab.ru/viewtopic.php?t=26629
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   This topic is locked: you cannot edit posts or make replies. All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML