Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   IE 6 свойство width (https://javascript.ru/forum/css-html-internet-explorer/13356-ie-6-svojjstvo-width.html)

abc_ua 27.11.2010 23:02

IE 6 свойство width
 
Написал скрипт, который меняет размер картинкам, вписывая их в определенные рамки, сохраняя при этом исходные пропорции:

var e = document.getElementsByTagName("img");
var width = 200, height = 300;
var w, h, hi, wi;
	
for (var i = 0; i < e.length; i++)
	if (e[i].className == "ph_cat")
		{
			w = e[i].width;
			h = e[i].height;
			
			hi = h * width / w;
			
			if (hi <= height)
				{
					e[i].width = width;
					e[i].style.paddingTop = (height - hi)/2 + "px";
					e[i].style.paddingBottom = (height - hi)/2 + "px";
				}
			else
				{
					wi = w * height / h;
					if (wi <= width)
						{
							e[i].height = height;
							e[i].style.paddingLeft = (width - wi)/2 + "px";
							e[i].style.paddingRight = (width - wi)/2 + "px";
						}
				}
		}


В IE 6 переменные w и h равны 0, помогите пожалуйста разобраться

monolithed 28.11.2010 00:17

e[i].style.width и тд.

abc_ua 28.11.2010 00:23

monolithed,
не работает

monolithed 28.11.2010 00:55

abc_ua так в IE6 работает:

var e = document.getElementsByTagName("img");
var width = 200, height = 300;
var w, h, hi, wi;
    
for (var i = 0; i < e.length; i++)
    if (e[i].className == "ph_cat")
        {
            w = e[i].width;
            h = e[i].height;
            
            hi = h * width / w;
            
            if (hi <= height)
                {
                    e[i].style.width = width +'px';
                    e[i].style.paddingTop = (height - hi)/2 + "px";
                    e[i].style.paddingBottom = (height - hi)/2 + "px";
                }
            else
                {
                    wi = w * height / h;
                    if (wi <= width)
                        {
                            e[i].style.height = height +'px';
                            e[i].style.paddingLeft = (width - wi)/2 + "px";
                            e[i].style.paddingRight = (width - wi)/2 + "px";
                        }
                }
        }

abc_ua 28.11.2010 01:05

monolithed,
не работает, у меня w и h равны 0 в ie 6

monolithed 28.11.2010 01:24

Почему тогда у меня в IE6 работает?
http://www.jsfiddle.net/RTq5N/53/

abc_ua 28.11.2010 02:00

monolithed, тут в ie работает, а на сайте - нет)

exec 28.11.2010 12:27

abc_ua, попробуйте offsetWidth и offsetHeight.

abc_ua 28.11.2010 13:44

проблема оказалась не в этом
$.get("ссылка", function (data) {
	...
	list += "<img...";
	...
	$("div#ph_catalog").html(list);
});

window.onload = function () {
	/* изменение размеров изображений */
});


Такое ощущение, что для ie 6 созданные img не успевают загрузится, отсюда нулевые значения

abc_ua 30.11.2010 01:54

-----

рони 30.11.2010 07:34

Изменение размеров картинки надо ставить на onload самой картинки установленному до src
function resize(obj) {
	/* изменение размеров изображений */
}
$.get("ссылка", function (data) {
	...
	list += "<img  onload = 'resize(this)' src=...";
	...
	$("div#ph_catalog").html(list);
});

);

abc_ua 30.11.2010 08:14

рони,
сейчас так и сделано, но опера(9.64) игнорирует onload, а в ie 6 не удается получить image.width

рони 30.11.2010 09:48

abc_ua,
пример для проверки в опере и ие ...
а лучше сами создайте где нибудь ваш неработающий макет чтобы не гадать
<!DOCTYPE html >
<html>
<head>
  <title></title>
<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
var list = "<img onload = '$(\"#d2\").html(this.width);' src='http://javascript.ru/forum/images/ca_serenity/misc/logo.gif'  />"
$('#d1').html(list);
});</script>
</head>
<body>
<div id="d1"></div>
<div id="d2"></div>
</body>
</html>

abc_ua 06.03.2011 09:54

это старый код, кстати, чтобы работало нужно еще дописать обработчик $(window).bind("load", function() {resize(...)});, если ie закэшировал изображение, то его width он НЕ выдаст при <img onload="" alt="" src="" />

Андрей38 06.03.2011 11:21

Цитата:

Сообщение от abc_ua (Сообщение 95263)
это старый код, кстати, чтобы работало нужно еще дописать обработчик $(window).bind("load", function() {resize(...)});, если ie закэшировал изображение, то его width он НЕ выдаст при <img onload="" alt="" src="" />

А, это динамическая подгонка суммы размеров картинок под экран ? Если да, то тогда _это THE BEST !!!

abc_ua 06.03.2011 17:09

скрипт берет изображения с классом ph_cat и масштабирует(добавляя отступы если нужно) изображения так, чтобы они вписались в прямоугольник со сторонами width и height. Писал когда-то для фотокаталога интернет магазина

Андрей38 11.03.2011 19:10

Цитата:

Сообщение от abc_ua (Сообщение 95338)
скрипт берет изображения с классом ph_cat и масштабирует(добавляя отступы если нужно) изображения так, чтобы они вписались в прямоугольник со сторонами width и height. Писал когда-то для фотокаталога интернет магазина

...Значит, прямуогольником может служить и экран ...Супер ! Вы просто мастер_ и по Квери, и по Ява , и...Жаль,что в Ява я понимаю только ГетЭлемент бай *). По Квери уже что-нибудь, да и начинаю понимать )
...Я на юкоз, когда закидывал изображения разного размера в таблицу , стандартным элигном центрировал их , а одним классом для всех них _ сделал им одинаковую высоту то все эти img были по центру в табличных ячейках в опере и фф, а от Эксплорер_ все сместил к левому краю ячейки .Так , что у Вас я нашел ответ ) . Вы,поистине,просто СУПЕР МАСТЕР ! Респект и уважение :thanks: !


Часовой пояс GMT +3, время: 15:34.