Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.11.2010, 11:42
Аватар для HelpeR
Профессор
Отправить личное сообщение для HelpeR Посмотреть профиль Найти все сообщения от HelpeR
 
Регистрация: 21.10.2008
Сообщений: 241

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

С чем это связанно, и как можно это решить?
Ответить с цитированием
  #2 (permalink)  
Старый 15.11.2010, 11:43
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

А как вы себе представляете половину пикселя?
Ответить с цитированием
  #3 (permalink)  
Старый 15.11.2010, 11:45
Аватар для HelpeR
Профессор
Отправить личное сообщение для HelpeR Посмотреть профиль Найти все сообщения от HelpeR
 
Регистрация: 21.10.2008
Сообщений: 241

если честно ни как, но знаю, что другие браузеры ее могут представить и работают корректно с ней
Ответить с цитированием
  #4 (permalink)  
Старый 15.11.2010, 11:47
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Ну они просто не показывают результаты своих преобразований, а IE показывает.
Ответить с цитированием
  #5 (permalink)  
Старый 15.11.2010, 11:52
Аватар для HelpeR
Профессор
Отправить личное сообщение для HelpeR Посмотреть профиль Найти все сообщения от HelpeR
 
Регистрация: 21.10.2008
Сообщений: 241

дело в том, что мне пришлось делать что то этого
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()
Ответить с цитированием
  #6 (permalink)  
Старый 15.11.2010, 12:02
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Не надо хранить данные в стилях. Это когда-нибудь да взорвётся. Вам повезло, у вас взорвалось сразу. Сохраняйте текущее значение в переменной, с ней и оперируйте.
Ответить с цитированием
  #7 (permalink)  
Старый 15.11.2010, 12:10
Аватар для HelpeR
Профессор
Отправить личное сообщение для HelpeR Посмотреть профиль Найти все сообщения от HelpeR
 
Регистрация: 21.10.2008
Сообщений: 241

спасибо, так и сделаю!
Ответить с цитированием
  #8 (permalink)  
Старый 15.11.2010, 13:37
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

Сообщение от 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>

Ответить с цитированием
  #9 (permalink)  
Старый 15.11.2010, 14:03
Аватар для HelpeR
Профессор
Отправить личное сообщение для HelpeR Посмотреть профиль Найти все сообщения от HelpeR
 
Регистрация: 21.10.2008
Сообщений: 241

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

//использовать это
opacity += 0.02;
setOpacity(obj, opacity);
Ответить с цитированием
  #10 (permalink)  
Старый 15.11.2010, 14:15
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнение элемента INPUT вычисляемым значением shah Элементы интерфейса 1 29.07.2010 14:11
Ширина таблицы Syltan (X)HTML/CSS 1 01.05.2010 22:33