Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JS открыть новое окно с размерами как у картинки 
:(
    Опции темы
chuser
Дата 14.10.2009, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 7.12.2007

Репутация: нет
Всего: нет



Задача такая: открыть новое окно и сделать его размеры равными размерам изображения, путь к которому передается в параметре img_url. Загружаю изображение и функцией checkLoad проверяю загрузилось оно или еще нет. В функции checkLoad использую рекурсию. Функция checkLoad должна выполняться пока изображение не загрузится, т.е. пока условие myImage.complete не станет true. Но нифига не работает. А вот, если в блоке else раскомментировать строку alert('no'), то все нормально работает. Зацикливание происходит. Ну естественно при каждой проверке выскакивает сообщение с текстом "no".
А вот, если строку alert('no') убрать, то не работает.
В чем проблема? Не могу разобраться. Уже полдня сижу и туплю.

function new_win(url, img_url)
{
var myImage = new Image();
myImage.src = "http://ekkirpich.ru" + img_url;
checkLoad();

function checkLoad(){
if(myImage.complete){
var w = myImage.width;
var h = myImage.height;
var wTop = screen.height / 2 - h / 2;
var wLeft = screen.width / 2 - w / 2;
var param = "width=" + w + ",height=" + h + ",left=" + wLeft + ",top=" + wTop;
newWin = window.open(url, "myWindow", param);
}
else{
//alert('no');
checkLoad();}
}
}

Это сообщение отредактировал(а) chuser - 14.10.2009, 11:11
PM MAIL   Вверх
magician7
Дата 14.10.2009, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 7.5.2009
Где: Киев

Репутация: нет
Всего: нет



не совсем понятно:
Цитата(chuser @  14.10.2009,  11:10 Найти цитируемый пост)
если в блоке else раскомментировать строку alert('no'), то все нормально работает. Зацикливание происходит.

Происходит только зацикливание? а срабатывает ли хоть раз условие:
Код

if(myImage.complete){

если нет, то что выводит такой код?
Код

function checkLoad(){
  alert(myImage.src)
}

PM MAIL WWW   Вверх
bars80080
Дата 14.10.2009, 13:15 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



вам не кажется странным, что у вас одна функция сидит в другой?
да ещё и вызов до объявления
PM MAIL WWW   Вверх
chuser
Дата 14.10.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 7.12.2007

Репутация: нет
Всего: нет



Условие if(myImage.complete){ не срабатывает. Не знаю почему. Но вот если раскомментировать строку alert('no'), то условие срабатывает.
alert(myImage.src) выводит корректный путь к изображению.
PM MAIL   Вверх
youri
Дата 15.10.2009, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: 2
Всего: 16



Цитата(bars80080 @  14.10.2009,  13:15 Найти цитируемый пост)
вам не кажется странным, что у вас одна функция сидит в другой?да ещё и вызов до объявления

ну мне, например, совсем не кажется: вложенные функции не загрязняют глобальное пространство имен. Объявления (переменных функций) "выполняются" при входе в функцию, перед выполнением кода

Цитата(chuser @  14.10.2009,  11:10 Найти цитируемый пост)
А вот, если строку alert('no') убрать, то не работает.

alert создает задержку, за которую картинка успевает загрузиться. Лучше назначай обработчик onload, причем перед назначением src
PM   Вверх
bars80080
Дата 15.10.2009, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



...

Добавлено через 1 минуту и 40 секунд
 smile может как раз отсутствие её в глобальном поле имён и не позволяет вызвать без задержки?

Это сообщение отредактировал(а) bars80080 - 15.10.2009, 00:44
PM MAIL WWW   Вверх
youri
Дата 15.10.2009, 02:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: 2
Всего: 16



Цитата(bars80080 @  15.10.2009,  00:43 Найти цитируемый пост)
может как раз отсутствие её в глобальном поле имён и не позволяет вызвать без задержки?

давай проверим
Код

function f() {
  g();
  function g() {
    var t = g.caller == f   ? 'А-'   : 'а-';
    document.body.appendChild( document.createTextNode(t) )
    g();
  }
}
f();

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0723 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.