Javascript.RU

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

Когда срабатывает image.onload?
Здравствуйте. Помогите разобратся с image.onload. У меня image.onload срабатывает до полной загрузки изображения (непонятно когда) и даже если изображения нет. Пример:
var i = new Image();
i.src = 'image.jpg'; // существующее изображение
i.onload = alert(i.width);

Все браузеры, кроме Оперы (Firefox, IE, Chrome) выводят 0. Повторный прогон того самого (закешированого) изображения выводит реальную ширину. Также реальная ширина выводится если выполнение онлоад задержать(setTimeout). Если изображения нет, то все браузеры выводят 0 (почему не "undefined"?).
Обьясните пожалуйста что да как.
Ответить с цитированием
  #2 (permalink)  
Старый 12.04.2010, 14:31
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 03.04.2008
Сообщений: 6,245

ну, мягко говоря вам следует подучить основы
var i = new Image(); //создаем объект рисунка
i.src = 'image.jpg'; // инициируем загрузку рисунка
//при этом если рисунок грузится с локальной машины, либо из кеша, то он будет загружен до выполнения следующей строки кода
//как результат, обработчик Onload не будет выполнен
i.onload = alert(i.width);//выполняем функцию alert, и результат ее выполнения присваиваем в качестве обработчика события
//то есть alert всегда будет выполнятся

правильно делать так:
var i = new Image(); 
i.onload = function(){alert(i.width);}
//1. назначем обработчик события до того, как начнется загрузка рисунка.
//таким образом событие сработает, при загрузке рисунка
//2. выполение alert-а обрачиваем в анонимную функцию, которая выставляется в качестве обработчика события
i.src = 'image.jpg'; // существующее изображение
Ответить с цитированием
  #3 (permalink)  
Старый 30.07.2014, 17:13
Новичок на форуме
Отправить личное сообщение для mevsme Посмотреть профиль Найти все сообщения от mevsme
 
Регистрация: 30.07.2014
Сообщений: 1

А как потом использовать в документе тот презагруженый рисунок?

Через innerHTML = '<img src='+src+' />'; ?
Ответить с цитированием
  #4 (permalink)  
Старый 30.07.2014, 17:22
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Сообщение от mevsme Посмотреть сообщение
А как потом использовать в документе тот презагруженый рисунок?

Через innerHTML = '<img src='+src+' />'; ?
Нет, тогда браузер скачает его заново.

var i = new Image(); 
i.onload = function(){alert(i.width);
someElement.appendChild(i);
}
//1. назначем обработчик события до того, как начнется загрузка рисунка.
//таким образом событие сработает, при загрузке рисунка
//2. выполение alert-а обрачиваем в анонимную функцию, которая выставляется в качестве обработчика события
i.src = 'image.jpg'; // существующее изображение
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не срабатывает обработчик window.onload. Alex82 Events/DOM/Window 16 22.02.2013 19:06
робота с <textarea>, все строки сливаются в одну когда виводжу из БД Max_2109 Общие вопросы Javascript 6 16.03.2010 02:18
EasySlider. Изменение дизайна ссылки когда список заканчивается Rostislav jQuery 3 16.09.2009 11:59
Не срабатывает onkeyup afandi Events/DOM/Window 3 08.12.2008 19:33