Ответ 1
Не используйте width
и height
. Вместо этого используйте naturalWidth
и naturalHeight
. Они обеспечивают изображение безмасштабированных размеров пикселей из файла изображения и будут работать в разных браузерах.
У меня есть функция resizer, которая изменяет пропорции изображения пропорционально. При каждой загрузке изображения вызовите эту функцию с изображением и измените размер, если его ширина или высота больше моей максимальной ширины и максимальной высоты. Я могу получить img.width и img.height в FF Chrome Opera Safari, но IE терпит неудачу. Как я могу справиться с этим?
Позвольте мне объяснить часть кода.
<img src="images/img01.png" onload="window.onImageLoad(this, 120, 120)" /> function onImageLoad(img, maxWidth, maxHeight) { var width = img.width; // Problem is in here var height = img.height // Problem is in here }
В моих highligted линиях img.width не работают на серии IE.
Любое предложение?
Спасибо.
Не используйте width
и height
. Вместо этого используйте naturalWidth
и naturalHeight
. Они обеспечивают изображение безмасштабированных размеров пикселей из файла изображения и будут работать в разных браузерах.
Человек, я искал это в течение 2 дней. Спасибо.
Я использую jQuery, но это не имеет значения. Проблема связана с javascript в IE.
Мой предыдущий код:
var parentItem = $('<div/>')
.hide(); // sets display to 'none'
var childImage = $('<img/>')
.attr("src", src)
.appendTo(parentItem) // sets parent to image
.load(function(){
alert(this.width); // at this point image is not displayed, because parents display parameter is set to 'none' - IE gives you value '0'
});
Это работает в FF, Opera и Safari, но не в IE. Я получал "0" в IE.
Обходной путь для меня:
var parentItem = $('<div/>')
.hide();
var childImage = $('<img/>')
.attr("src", src)
.load(function(){
alert(this.width); // at this point image css display is NOT 'none' - IE gives you correct value
childImage.appendTo(parentItem); // sets parent to image
});
Вот как я его решил (потому что это единственный js на сайте, который я не хотел использовать в библиотеке).
var imageElement = document.createElement('img');
imageElement.src = el.href; // taken from a link cuz I want it to work even with no script
imageElement.style.display = 'none';
var imageLoader = new Image();
imageLoader.src = el.href;
imageLoader.onload = function() {
loaderElement.parentElement.removeChild(loaderElement);
imageElement.style.position = 'absolute';
imageElement.style.top = '50%';
imageElement.style.left = '50%';
// here using the imageLoaders size instead of the imageElement..
imageElement.style.marginTop = '-' + (parseInt(imageLoader.height) / 2) + 'px';
imageElement.style.marginLeft = '-' + (parseInt(imageLoader.width) / 2) + 'px';
imageElement.style.display = 'block';
}
Это потому, что IE не может рассчитать ширину и высоту изображений display: none
. Вместо этого используйте visibility: hidden
.
Try
function onImageLoad(img, maxWidth, maxHeight) {
var width = img.width; // Problem is in here
var height = img.height // Problem is in here
if (height==0 && img.complete){
setTimeOut(function(){onImageLoad(img, maxWidth, maxHeight);},50);
}
}
var screenW = screen.width;
var screenH = screen.height;
//alert( screenW );
function checkFotoWidth( img, maxw )
{
if( maxw==undefined)
maxw = 200;
var imgW = GetImageWidth(img.src);
var imgH = GetImageHeight(img.src);
//alert(GetImageWidth(img.src).toString()); // img.width); // objToString(img));
if (imgW > maxw || (img.style.cursor == "hand" && imgW == maxw))
{
if (imgW > screenW) winW = screenW;
else winW = imgW;
if (imgH > screenH) winH = screenH;
else winH = imgH;
img.width=maxw;
img.style.cursor = "pointer";
img.WinW = winW;
img.WinH = winH;
//alert("winW : " + img.WinW);
img.onclick = function() { openCenteredWindow("Dialogs/ZoomWin.aspx?img=" + this.src, this.WinW, this.WinH, '', 'resizable=1'); }
img.alt = "Klik voor een uitvergroting :: click to enlarge :: klicken Sie um das Bild zu vergrössern";
//alert("adding onclick);
}
}
function GetImageWidth(imgSrc)
{
var img = new Image();
img.src = imgSrc;
return img.width;
}
function GetImageHeight(imgSrc)
{
var img = new Image();
img.src = imgSrc;
return img.height;
}
Я бы попробовал это:
function onImageLoad(img, maxWidth, maxHeight) {
var width, height;
if ('currentStyle' in img) {
width = img.currentStyle.width;
height = img.currentStyle.height;
}
else {
width = img.width;
height = img.height;
}
// whatever
}
edit — и, судя по всему, если бы я попытался понять, что это не сработает:-) Хорошо, ну "ширина" и "высота" определенно кажутся атрибутами элементов <img>
в отношении IE. Возможно, проблема в том, что событие "load" запускает элемент в неподходящее время. Чтобы проверить это, я бы попробовал следующее:
function onImageLoad(img, maxWidth, maxHeight) {
var width, height;
var i = new Image();
i.onload = function() {
width = i.width; height = i.height;
// ... stuff you want to do ...
};
i.src = img.href;
}
getDisplay().getImage().setUrl(imgURL);
final Image img = new Image(imgURL);
int w=img.getWidth();
int h=img.getHeight();