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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> IE6 размер изображения 
:(
    Опции темы
mlv11
Дата 23.7.2012, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

<img id=01 src=myimg.gif>
<script language=JavaScript>
w1=document.getElementById('01').width;
w2=document.getElementById('01').offsetWidth;
</SCRIPT>


В FireFox v.13 дает w1=w2=реальная ширина в px
в IE 6 дает w1=w2=0

Как узнать размеры изображения в IE6 если оно прописано в теге
<img id= src=> без width= height= ?


Это сообщение отредактировал(а) Aliance - 25.7.2012, 09:37
PM MAIL   Вверх
dstorm81
Дата 24.7.2012, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


бездельник
***


Профиль
Группа: Завсегдатай
Сообщений: 1178
Регистрация: 18.1.2006
Где: (16RU)

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



а так?
Код

<img id="im01" src=myimg.gif>
<script language=JavaScript>
var myimage = document.getElementById("im01"); 
   // IE 6/7/8 
  var i = new Image(); 
  i.src = myimage.src; 
  var rw = i.width; 
  var rh = i.height; 
</SCRIPT>



--------------------
на форуме с 8.12.2002 (http://forum.vingrad.ru/index.php?act=ST&f=10&t=4874&st=0#)

PM   Вверх
Amphiluke
Дата 24.7.2012, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

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



Цитата(mlv11 @  23.7.2012,  18:47 Найти цитируемый пост)
Как узнать размеры изображения в IE6 если оно прописано в теге<img id= src=> без width= height= ?

Если изображение закэшировано, оно загрузится сразу, и тогда размеры можно считать, как это делаете вы. Однако правильнее дождаться окончания загрузки изображения и только после этого считывать размеры. Окончание загрузки картинки «знаменуется» срабатыванием события onload объекта HTMLImageElement.
PM   Вверх
Aliance
Дата 25.7.2012, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



mlv11, атрибут ID должен содержать уникальный набор симвлов, начинающийся НЕ с цифры.
PM MAIL WWW ICQ Skype   Вверх
mlv11
Дата 28.7.2012, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Amphiluke @ 24.7.2012,  20:32)
Цитата(mlv11 @  23.7.2012,  18:47 Найти цитируемый пост)
Как узнать размеры изображения в IE6 если оно прописано в теге<img id= src=> без width= height= ?

Если изображение закэшировано, оно загрузится сразу, и тогда размеры можно считать, как это делаете вы. Однако правильнее дождаться окончания загрузки изображения и только после этого считывать размеры. Окончание загрузки картинки «знаменуется» срабатыванием события onload объекта HTMLImageElement.

Прошу подробнее о формулировке условия onload.
Проблему я уже решила. Дело в загрузке изображений. Размер отображается только после загрузки. Пришлось ввести setInterval и setTimeout на этот процесс, а потом clear оба, но если есть прямое условие на проверку загрузки, то это здорово, а то таймаут методом тыка подбирала с запасом.
Как записать это условие в коде?

Добавлено @ 17:16
Цитата(Aliance @ 25.7.2012,  09:39)
mlv11, атрибут ID должен содержать уникальный набор симвлов, начинающийся НЕ с цифры.

Спасибо за замечание, в коде я начинаю с букв, здесь слишком примитизировала описание проблемы.
Хотя проверила сейчас - и цифровое ID работает

Добавлено @ 17:19
Цитата(dstorm81 @ 24.7.2012,  13:51)
а так?
Код

<img id="im01" src=myimg.gif>
<script language=JavaScript>
var myimage = document.getElementById("im01"); 
   // IE 6/7/8 
  var i = new Image(); 
  i.src = myimage.src; 
  var rw = i.width; 
  var rh = i.height; 
</SCRIPT>

Дико интересно. А зачем Вы пишете var? Я давно не пишу. Проблема была в том, что IE показывает нуль для ширины и высоты картинок, теперь ясно, что пока не загрузит. Меня это бесит - 6 секунд таймаута с запасом пришлось дать до обработки размеров, чтобы наверняка был не нуль размеров. 

Это сообщение отредактировал(а) mlv11 - 15.8.2012, 16:03
PM MAIL   Вверх
Amphiluke
Дата 28.7.2012, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

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



Цитата(mlv11 @  28.7.2012,  21:15 Найти цитируемый пост)
Прошу подробнее о формулировке условия onload.

Вот вам пример
Код

<p><img src="http://forum.vingrad.ru/uploads/av-150085.gif?nocache" alt="mlv11" id="mlv11"/></p>
<script type="text/javascript">
    window.onload = function () {
        function showSize() {
            alert(this.offsetWidth + " x " + this.offsetHeight);
        }
        var img = document.getElementById("mlv11");
        if (img.complete) {
            showSize.call(img);
        } else {
            img.onload = showSize;
        }
    };
</script>


Цитата(mlv11 @  28.7.2012,  21:15 Найти цитируемый пост)
А зачем Вы пишете var? Я давно не пишу.

И это очень плохо. По-видимому, вы не вполне понимаете предназначение этой инструкции.

Это сообщение отредактировал(а) Amphiluke - 28.7.2012, 19:48
PM   Вверх
mlv11
Дата 5.8.2012, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

И это очень плохо. По-видимому, вы не вполне понимаете предназначение этой инструкции.


var a;b=5;
При задании конкретного значения переменной var излишен. Что же понимаете Вы? Умеете писать лишний код и поучать этому?
PM MAIL   Вверх
нуп
Дата 5.8.2012, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


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

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



Цитата(mlv11 @  5.8.2012,  10:51 Найти цитируемый пост)
var a;b=5;
При задании конкретного значения переменной var излишен. Что же понимаете Вы? Умеете писать лишний код и поучать этому? 

Судя по вашему опыту, вам нужно книжки писать. 
PM MAIL   Вверх
Amphiluke
Дата 5.8.2012, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

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



mlv11, не обижайтесь. ))

Инструкция var была придумана не дураками и она действительно важна для объявления переменных. Если вам интересно, могу попробовать пояснить отличия объявлений с var и без него, а также почему использование var при объявлении переменных настоятельно рекомендуется.
Работа JavaScript-интерпретатора при обработке исполняемого кода состоит фактически из 2-х этапов:
  1.  Вход в контекст
  2.  Интерпретация кода
Так вот, при входе в контекст происходит то, что называется «поднятием», или «hoisting»: все объявления переменных и функций заносятся в свойства объекта переменных и на этапе интерпретации становятся доступными для всего контекста, независимо от того, где именно в данном контексте содержится это объявление.
Например:
Код

// код глобального контекста
alert(truthVariable); // выводит undefined, но не выбрасывает исключение ReferenceError, как в случае с необъявленной переменной
alert(functionDeclaration); // выводит строковое представление функции

// а сами объявления могут располагаться в любом месте, даже ниже использующего их кода
var truthVariable = 5;
function functionDeclaration() { alert("Hello!"); }
alert(truthVariable); // выводит 5

Для объявлений, не использующих var, это всё уже несправедливо:
Код

// код глобального контекста
alert(fakeVariable); // выбрасывает исключение ReferenceError!
fakeVariable = 5;


Если вы не используете инструкцию var, создавая новые «переменные», вы фактически просто создаете свойство глобального объекта, которое не участвует в процессе hoisting и на этапе интерпретации доступно не во всем родительском контексте, а только в той части, которое следует после объявления.
Другое отличие объявлений с var и без него в том, что «истинные переменные» — свойства объекта переменных — обладают внутренним свойством, запрещающим их удаление оператором delete, в то время как «переменные», созданные без использования var, могут быть явно удалены оператором delete.

Кроме того, более очевидное (и важное) отличие переменных, объявленных с использованием var, состоит в том, что для контекста, отличного от глобального (например, для контекста функции), такие переменные становятся локальными и не захламляют глобальное пространство имен. Следовательно код становится устойчивее к возможным конфликтам имен. А это один из важных показателей качества кода. Для серьезных продуктов критерий минимального количества глобальных переменных (в идеале — не более одного глобального имени) — это одно из категорических требований.

Это сообщение отредактировал(а) Amphiluke - 5.8.2012, 12:34
PM   Вверх
mlv11
Дата 15.8.2012, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(нуп @ 5.8.2012,  12:17)
Судя по вашему опыту, вам нужно книжки писать.

Моя первая книга "40 ВУЗов Москвы" вышла, возможно, до Вашего рождения. Но не по программированию, физ.-мат.
PM MAIL   Вверх
нуп
Дата 15.8.2012, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


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

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



Тогда пишите про излишние конструкции в javascript
PM MAIL   Вверх
mlv11
Дата 15.8.2012, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Amphiluke @ 5.8.2012,  12:31)
mlv11, не обижайтесь. 
Кроме того, более очевидное (и важное) отличие переменных, объявленных с использованием var, состоит в том, что для контекста, отличного от глобального (например, для контекста функции), такие переменные становятся локальными и не захламляют глобальное пространство имен. Следовательно код становится устойчивее к возможным конфликтам имен. А это один из важных показателей качества кода. Для серьезных продуктов критерий минимального количества глобальных переменных (в идеале — не более одного глобального имени) — это одно из категорических требований.

По поводу начала - обращение к переменным до задания их значений экзотика.
По поводу Вашего главного аргумента о том, что декларированные с var переменные
локальны в функциях, а без var остаются глобальными?
Т.е. на изменение значения в функции глобальной переменной, определённой с var, начхать,
а вот если без var - то изменится?

Делаем пример
Код

<script  type=text/javascript><!-- 
a=1;var b=2;function my(){a=3;b=4}my();alert('a='+a+' b='+b);
//--></SCRIPT>


Если бы Вы были правы, то в alert нам выдали бы a=3 b=2,
но alert выдает новые значения для обех переменных a=3 b=4

Или в этом единственном стоящем аргументе Вы имели ввиду нечто иное?
PM MAIL   Вверх
нуп
Дата 15.8.2012, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


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

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



 Я ничего вам не пытаюсь доказать, пишите как хотите  smile 
PM MAIL   Вверх
Amphiluke
Дата 16.8.2012, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

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



Цитата(mlv11 @  15.8.2012,  21:00 Найти цитируемый пост)
По поводу начала - обращение к переменным до задания их значений экзотика.

К переменным — может быть. Но с декларациями функций — повсеместно. Причем работает тот же механизм поднятия.

Пример ваш непонятно, на что направлен, поскольку там нет ни одной локальной переменной.

Цитата(mlv11 @  15.8.2012,  21:00 Найти цитируемый пост)
Если бы Вы были правы, то в alert нам выдали бы a=3 b=2

Я разве где-то сказал, что из функций невозможно изменить глобальные переменные, объявленные с var?
PM   Вверх
ksnk
Дата 16.8.2012, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



mlv11, описание переменной с var отводит этой переменной новое место в памяти в области видимости текущего тела функции. Если же пользоваться переменной не описывая ее, то она станет новым свойством глобального объекта. Для броузерного Javascript - объекта window. Проверить легко
Код

<script  type="text/javascript"><!-- 
function test(){
a=1;var b=2;alert('a='+a+' window.a='+window.a+' b='+b+' window.b='+window.b);
}
a=3; var b=4;alert('a='+a+' window.a='+window.a+' b='+b+' window.b='+window.b);
test();
//--></SCRIPT>

Как можно заметить, при использовании var вне тела функции разницы между "описаниями" нету. переменная b становится свойством объекта window

Вот, собственно и все отличие. Достаточно использовать в нужных местах несколько переменных с именами document, location и так далее (см. важные свойства window), чтобы потратить оставшуюся жизнь на поиск странных ошибок в сриптах  smile 


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


 




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


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

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