我正在处理的网站有很多从数据库中提取的图像。图像的尺寸不一致,我试图在统一大小的盒子(div)中显示它们。我不知道任何图像的尺寸,但我可以检索它们:JavaScript图片调整缓慢
document.getElementById(myImage).width
document.getElementById(myImage).height
这个我做我的测试,看看如何调整图片以适应统一的盒子之后。最后,我设置与效果:
document.getElementById(myImage).width = theNewWidth
document.getElementById(myImage).height = theNewHeight
此功能仅在img标签使用onload="resizingFunction(imgId);"
每叫一次图像。数据库中的每个图像都需要大约1-2秒才能完成此功能,并且再也不会为这些图像运行该功能。尽管从未再次运行,但如果使用此功能,网站运行速度会明显变慢。谷歌搜索后,我尝试添加:
document.getElementById(myImage).removeAttribute("width")
document.getElementById(myImage).removeAttribute("height")
在设置新的宽度和高度之前。这确实提高了速度,但仍然比我没有调整图像大小时慢。再次,为了澄清,每个图像在被加载一次后调整大小,但由于某种原因,这仍然会减慢网站的速度。
图像是通过将PHP回显到JavaScript创建的。这是必要的,因为他们需要来自数据库(PHP)的信息,JavaScript将它们放在正确的盒子(div)中。以下是图像的代码创建:
echo "\t\t\tdocument.getElementById('gBox".$i."').innerHTML = '<img onload=\"image_applyToGrid(".$i.");\" id=\"img".$i."\" style=\"left:0; top:0;\" src=\"'+gBoxes[".$i."].imgPath+'\"/>';\n";
下面是影像缩放功能调用图像的onload一次:
function image_applyToGrid(inId) {
inIdImage = document.getElementById("img"+inId);
var imgW = inIdImage.width;
var imgH = inIdImage.height;
if (imgW > imgH) {
var proportions = imgW/imgH;
imgH = gridUnit;
imgW = gridUnit*proportions;
inIdImage.style.left = -((imgW-gridUnit)>>1)+"px";
}
else {
var proportions = imgH/imgW;
imgW = gridUnit;
imgH = gridUnit*proportions;
inIdImage.style.top = -((imgH-gridUnit)>>1)+"px";
}
inIdImage.removeAttribute("width");
inIdImage.removeAttribute("height");
inIdImage.width = imgW;
inIdImage.height = imgH;
}
你为什么不调整在服务器端的图像?加载许多大图像会影响性能。你说这个函数永远不会再运行一个图像,但它看起来总是在页面加载时运行,它似乎并没有改变图像的实际大小并将其存储在某个地方。 –
您是否尝试过使用CSS解决方案?有一个容器包装图像设置他们都css的'max-width'和'max-height'属性? – VKen
您可以通过PHP提供图像,并在URL中包含一个额外的大小参数。如果存在这种尺寸的图像,请提供。如果没有,请加载原始图像,调整其大小并存储调整后的版本。这不应该太复杂... –