2010-10-25 3 views
1

У меня есть следующая простая функция предварительной загрузки, которая заменяет атрибут «src» изображения другим изображением (анимированный GIF «Загрузка»). Проблема возникает только в IE: если «загружаемый» GIF меньше фактического изображения src, размер которого будет изменен. Например, если у меня есть квадратное изображение 100px и его предварительная загрузка, изображение временно заменяется анимированным GIF размером 50x50 пикселей. Whem оригинальное изображение полностью загружено, оно НЕ отображается по своему размеру, но на меньших 50 пикселей. Вот код, если вам это нужнообмен изображениями разных размеров [Javascript vs IE]

_preload = function(url, placeholderUrl) { 
var img = new Image(); 
loading = true; 
var placeholder = new Element("img", { 
    src: placeholderUrl 
}); 
img.placeholder = placeholder; 
img.onload = function(evt) { 
    this.placeholder.src = this.src; 
    loading = false; 
} 
img.src = url; 
return placeholder; 
} 

alt text Здесь вы можете увидеть визуальную ошибку

+0

Не уверен, но попробовать принудительно 'img.style.width =" auto ";' (и, соответственно, 'height') на изображении после смены src –

ответ

2

Вы должны иметь возможность регулировать ширину/высоту изображения в функции обратного вызова:

img.onload = function(evt) { 
    this.placeholder.src = this.src; 
    this.placeholder.width = this.width; 
    this.placeholder.height = this.height; 
    loading = false; 
} 

Пример: Resizing image onLoad

+0

Это определенно решает мою проблему. Хотя, очень странно, что вам разрешено делать что-то вроде этого. И браузер по-прежнему не делает это сам по себе: P – Raffaele

+0

Установка ширины/высоты - это как настройка src, они все общедоступные. Но да, было бы хорошо, если бы все браузеры работали одинаково с JS. – subhaze

0

Я думаю замена заполнитель с IMG (в IMG-элементы внутри DOM), вместо просто изменить src-атрибут заполнителя, должен исправить эту проблему.

+0

Это тоже решение, но мне кажется сложнее. Замена в dom = добавлениеNew + удаление Old. Поскольку я не хочу одновременно отображать 2 изображения, мне сначала нужно будет удалить(), а затем добавить(), но добавление может быть довольно сложной функцией, если вы больше не используете ссылку элемента-заполнителя в доминион – Raffaele

Смежные вопросы