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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Свойство image.width не работает в Opera \ FF, В чем моя ошибка? 
:(
    Опции темы
zodiac
Дата 15.10.2010, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте!
Я использую небольшой скрипт, чтобы запрещать к загрузке слишком большие изображения.

Код

var imb=new Image();
imb.src=fn;
var sX=imb.width;
var sY=imb.height;
if(sX==0&&sY==0) {
alert('Изображение еще не загрузилось в память! Пожалуйста, попробуйте еще раз!');
return;
}


Этот код корректно работает в Эксплорере, но никак не хочет работать в Опере - свойства width и height всегда имеют значение 0.

Почему Опера не может видеть ширину и высоту рисунка? Помогите, пожалуйста, разобраться!)
PM MAIL   Вверх
bars80080
Дата 15.10.2010, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



что такое fn? откуда берётся?
PM MAIL WWW   Вверх
zodiac
Дата 15.10.2010, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот из этого:

Код

var fn=document.getElementById('filename').value;
if(fn=="") return;
//если файл выбран

var imb=new Image();
imb.src=fn;
var sX=imb.width;
var sY=imb.height;
if(sX==0&&sY==0) {
alert('Изображение еще не загрузилось в память! Пожалуйста, попробуйте еще раз!');
return;
}


Код

<form action="../upload.php" method="post" enctype="multipart/form-data">
<input type="file" id="filename" name="filename" />
<input type="submit" />
</form>


Это сообщение отредактировал(а) zodiac - 15.10.2010, 23:59
PM MAIL   Вверх
bars80080
Дата 15.10.2010, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



ну, вообще-то поле типа файл одно из самых не берущихся и трудно анализируемых. сделано это по причинам безопасности, и в целом это не побороть. во всяком случае с позиции html+javascript вашу задачу не реализовать. /не думайте, что первый под это копаете/

единственный вариант по пробовать подкопаться через флэш. но тут уже ничего посоветовать не могу
PM MAIL WWW   Вверх
zodiac
Дата 16.10.2010, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

Да, флеш могуч... наверное, так и придется сделать) Спасибо за совет!
PM MAIL   Вверх
bars80080
Дата 16.10.2010, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



Цитата(zodiac @  16.10.2010,  00:09 Найти цитируемый пост)
наверное, Опера в силу своих особенностей получает размеры только когда картинка выводится на страницу

это да, есть такое. точно так действует в опере, если присваивать урл-адрес, пока картинку не вывести на страницу - фиг загрузится. правда, я думал что с локальными путями будут вообще непробиваемые проблемы.
а как оно ведёт себя в ИЕ и хроме?
PM MAIL WWW   Вверх
zodiac
Дата 16.10.2010, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Насчет хрома не знаю, в ИЕ все работает как запланировано - через некоторое время после выбора файла Эксплорер получает размеры (обычно сразу, но так как пробовал с очень большими картинками - по 12-15 мб, требовалось немного времени на загрузку), что и получаем при нажатии на кнопку...
Полностью код выглядит так:
Код

function imgValidate() {
var fn=document.getElementById('filename').value;
if(fn=="") return;

var imb=new Image();
imb.src=fn;
var sX=imb.width;
var sY=imb.height;
if(sX==0&&sY==0) {
alert('Изображение еще не загрузилось в память! Пожалуйста, попробуйте еще раз!');
return;
}
if(sX>1200||sY>1200) {
var output=document.getElementById('out');
output.innerHTML="Изображение имеет слишком большие размеры (Ширина - "+sX+", Высота - "+sY+")";
}
}


Код

<form action="../upload.php" method="post" enctype="multipart/form-data">
<input type="file" id="filename" name="filename" />
<div id="out">
<input type="button" onClick="imgValidate()" value="Проверить размер изображения" />
</div>
</form>


Т.е. все делается при нажатии на кнопку. Может ли причина проблемы (пусть частично) крыться и в этом?
PM MAIL   Вверх
Elfet
Дата 16.10.2010, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

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



zodiac, картинка не успевает загрузится. Попробуй вот так:
Код

var width;
var height;
var img = new Image();
img.onload = function () {
        width = this.width;
        height = this.height;
}
img.src = url;



--------------------
PM MAIL WWW Skype   Вверх
zodiac
Дата 16.10.2010, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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


 




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


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

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