Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   ширина рисунка с дробным значением (https://javascript.ru/forum/css-html-internet-explorer/13097-shirina-risunka-s-drobnym-znacheniem.html)

HelpeR 15.11.2010 11:42

ширина рисунка с дробным значением
 
Здравствуйте всем!
Только заметил, что IE не присваивает такое вот значение
var img = new Image();
img.style.width = '152.5px';
alert(img.style.width); //смотрите только в IE. Результат 152px

С чем это связанно, и как можно это решить?

Kolyaj 15.11.2010 11:43

А как вы себе представляете половину пикселя?

HelpeR 15.11.2010 11:45

если честно ни как, но знаю, что другие браузеры ее могут представить и работают корректно с ней

Kolyaj 15.11.2010 11:47

Ну они просто не показывают результаты своих преобразований, а IE показывает.

HelpeR 15.11.2010 11:52

дело в том, что мне пришлось делать что то этого
var step = 1.5;
var width = parseFloat(img.style.width) + step;
var left = parseFloat(img.style.left) - step / 2;
img.style.width = width + 'px';
img.style.left = left + 'px';

таким образом добиваюсь, что рисунок расширяется в на месте. Все браузеры сработали как ожидалось, но ие пополз в одну сторону, а не стал расширяться на месте, вот и начал копать в чем причина и наткнулся на это все! пришлось все превращать в Math.round()

Kolyaj 15.11.2010 12:02

Не надо хранить данные в стилях. Это когда-нибудь да взорвётся. Вам повезло, у вас взорвалось сразу. Сохраняйте текущее значение в переменной, с ней и оперируйте.

HelpeR 15.11.2010 12:10

спасибо, так и сделаю!

subzey 15.11.2010 13:37

Цитата:

Сообщение от Kolyaj
А как вы себе представляете половину пикселя?

По-моему, он выглядит вот так:
<div style="width: 99px; height: 20px; background: #ffff88">
	<div style="height: 100%;background: black;
	transform-origin: 0 0;
	transform: scale(.5, 1);
	-o-transform-origin: 0 0;
	-o-transform: scale(.5, 1);
	-moz-transform-origin: 0 0;
	-moz-transform: scale(.5, 1);
	-webkit-transform-origin: 0 0;
	-webkit-transform: scale(.5, 1);
	filter:progid:DXImageTransform.Microsoft.Matrix(M11=0.5, M12=0, M21=0, M22=1);
	"></div>
</div>

:)

HelpeR 15.11.2010 14:03

Цитата:

Сообщение от Kolyaj (Сообщение 79343)
Не надо хранить данные в стилях. Это когда-нибудь да взорвётся. Вам повезло, у вас взорвалось сразу. Сохраняйте текущее значение в переменной, с ней и оперируйте.

В этом примере та же самая ситуация, но как вы думаете есть ли минус в использовании такого подхода, т.е. назначать прозрачность не доствая его!
//вместо этого
var opacity = getOpacity(obj) + 0.02;
setOpacity(obj, opacity);

//использовать это
opacity += 0.02;
setOpacity(obj, opacity);

Kolyaj 15.11.2010 14:15

А в чём может быть минус?

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


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