JS实现图片自动按比例缩小代码
2010-7-4 - - 网页设计 - Views
最近不少使用Z-Blog的同学向我反映了这个问题——如果在博客中插入尺寸过大的图片,会导致页面被图片撑破,出现页面错位或错乱现象。他们问说是否有办法能够实现图片自动按比例缩小?低一度想了想,办法是有的,利用一小段JS代码就能达成。
首先,假设你的博客主题调用日志内容与摘要时的DIV格式如下——
<div id="content"><#article/intro#></div>(摘要)
<div id="content"><#article/content#></div>(全文内容)
当你在摘要或文章中插入图片的时候,忽略其他非图片因素,整体代码格局就会变为这样——
<div id="content"><img alt="" width="宽" height="高" src="图片路径" /></div>(此时的宽与高是实际尺寸,比如width="1024" height="768")
那么,如何让该图片自动按比例缩小呢?根据这个DIV,我们可以在该页面所调用的模板中插入如下代码——
<script type="text/javascript" >
//缩放图片到合适大小function ResizeImages()
{
var myimg,oldwidth,oldheight;
var maxwidth=400; //图片缩放后的宽度,可自行修改
var maxheight=300; //图片缩放后的高度,可自行修改
var imgs = document.getElementById('content').getElementsByTagName('img'); //如果你定义的id不是content,请修改此处for(i=0;i<imgs.length;i++){
myimg = imgs[i];if(myimg.width > myimg.height)
{
if(myimg.width > maxwidth)
{
oldwidth = myimg.width;
myimg.height = myimg.height * (maxwidth/oldwidth);
myimg.width = maxwidth;
}
}else{
if(myimg.height > maxheight)
{
oldheight = myimg.height;
myimg.width = myimg.width * (maxheight/oldheight);
myimg.height = maxheight;
}
}
}
}
//缩放图片到自定义大小
ResizeImages();
</script>
这样一来,原先这张1024*768的图片,即可按比例被缩小为400*300了。不过,这个方法有一点不足,即并非等比例缩小。举个例子,当原图的宽高比例为900*360这样子时,缩小后,同样变成了400*300的比例,如此就可能导致图片变形。不知道大家是否有更好的解决办法?OK,最后再来一个实例演示——
提示:您可以先修改部分代码再运行
关键词 // JS实例 JS应用 网页设计
出处:低一度,链接:http://www.diyidu.cn/post/js_tupiansx.html
随机推荐
to "JS实现图片自动按比例缩小代码"
-
#1 acboy 回复该留言 2010-7-4 12:23:41沙发,我的沙发。
-
加载的话还是加载大的,有意义?diyidu 于 2010-7-4 12:25:12 回复最大的意义就是防止页面被撑破。
-
我也过来看看。diyidu 于 2010-7-5 10:32:55 回复感谢捧场。
-
还是直接用小图片吧。diyidu 于 2010-7-5 10:33:28 回复是啊,这样最直接。
-
用CSS可以做到吧。diyidu 于 2010-7-5 10:33:54 回复也可以啊。
-
其实吧,博客而已,直接用小图算了。diyidu 于 2010-7-5 10:34:30 回复这样倒是最直接,呵。
-
我一般都会把图片处理好。diyidu 于 2010-7-5 10:35:03 回复但是不少同学不懂这个。
-
看来又是一个技术博客,不错,我会常来的。diyidu 于 2010-7-5 10:35:30 回复欢迎常来。
-
学习啦,代码我偷走了,哈。diyidu 于 2010-7-5 10:35:53 回复哦了。呵呵。
-
在图片标签里加个属性:onload="if(this.offsetWidth>300)this.width=300;"
或用CSS的方式:
#content img { /*博客内容下的img标签*/
max-width: 300px; /* FF*/
width:expression(this.width > 300 ? 300 : true);
}diyidu 于 2010-7-5 10:36:38 回复恩,CSS的方法,值得借鉴。
-
或者你的代码不要限制高——
function ResizeImages()
{
var myimg;
var maxwidth=300; //图片缩放后的宽度,可自行修改
var imgs = document.getElementById('content').getElementsByTagName('img'); //如果你定义的id不是content,请修改此处
for(i=0;i<imgs.length;i++){
myimg = imgs[i];
if(myimg.width > maxwidth)
{
myimg.width = maxwidth;
}
}
}diyidu 于 2010-7-5 10:39:00 回复好像行不通哦。
-
我都是手动修改的。diyidu 于 2010-7-5 10:39:37 回复手动?是在后台直接压缩?
-
很不错哦,效果不错。diyidu 于 2010-7-5 10:40:07 回复呵呵,谢谢鼓励。
-
我不用,直接写点生活就好!diyidu 于 2010-7-5 10:40:35 回复这样最好啊。
-
这个运行代码的窗口不错。diyidu 于 2010-7-5 10:41:06 回复呵呵,这是个插件。
-
这个比较实用,收下了,谢谢……diyidu 于 2010-7-5 10:41:34 回复不客气。
-
我是WP,飘过。diyidu 于 2010-7-5 10:42:28 回复WP也可以弄的,方法一样。不过WP好像已经有缩略图插件了。
-
绿色皮肤,真养眼。diyidu 于 2010-7-5 10:43:06 回复呵,姐姐那个主题也很养眼啊。
-
一度哥,哈哈!我来瞅瞅你啊。diyidu 于 2010-7-5 11:05:09 回复哦。你好啊。
-
顶一个,博主技术牛。diyidu 于 2010-7-5 15:48:21 回复多谢顶呵。
-
这样做了,影响速度吗?哈哈,我好像只关心速度了~diyidu 于 2010-7-5 15:49:09 回复负责任地说,肯定会影响到。
-
用CSS来实现对速度好点吧。diyidu 于 2010-7-8 18:04:17 回复其实都差不多,CSS对SEO会好一点。
-
要是能等比,就更强悍了~diyidu 于 2010-7-9 13:24:56 回复应该可以吧,我再想想怎么实现。
-
很好,来帮你顶了,菜鸟过来看看。感谢你的回访哦!diyidu 于 2010-7-10 17:01:38 回复欢迎呵。常来。
-
用css定义个max-width,然后js处理,超过此则宽度缩放为此;然后计算一下缩放率,高度就乘以这个缩放率不就可以了吗?高度就不要处理了,就页面来说,撑破的只会是横向,纵向没关系。这样900*360就被缩放为400*160,依然维持宽高比。diyidu 于 2010-8-8 11:18:39 回复没错。我的新主题就是用这个方法实现的。
-
这个代码很好!博主牛人啊。



