web网页按比例显示图片实现原理及js代码


Posted in Javascript onAugust 09, 2013

在动态站点上经常需要上传自己的图片,而这些图片的大小是未知的,在显示成缩略图的时候必须进行按比例的缩放才能美观地显示。以最近做的golf网站(http://www.changligolfsales.com)做例子。

该网站需要上传高尔夫产品图片,并以缩略图显示在列表上,站点服务器支持Asp,但不支持aspjpeg之类的生成缩略图组件,所以将上传的图片直接显示成缩略图,就需要按比例缩放了,前提是要获取图片的长宽,第一个想到的方法是在上传的时候通过ADODB.STREAM对象读取图片的长宽信息保存在数据库并在页面生成的时候读取出来计算比例。这个方法明显的缺点是显示每张图片都要在服务器读取数据并计算,消耗资源多了也加上了页面打开时延。
而第二个方法使用Javascript是将计算量转移到了客户端。

原理是在页面载入完成后(onload触发)在客户端使用Javascript读取每张图片的大小并进行缩放。

//将imageDest图片的大小按比例缩放,适合显示在宽W和高H的区域内 
function ResizeImage(imageDest, W, H) 
{ 
//显示框宽度W,高度H 
var image = new Image(); 
image.src = imageDest.src; 
if(image.width>0 && image.height>0) 
{ 
//比较纵横比 
if(image.width/image.height >= W/H)//相对显示框:宽>高 
{ 
if(image.width > W) //宽度大于显示框宽度W,应压缩高度 
{ 
imageDest.width = W; 
imageDest.height = (image.height*W)/image.width; 
} 
else //宽度少于或等于显示框宽度W,图片完全显示 
{ 
imageDest.width = image.width; 
imageDest.height = image.height; 
} 
} 
else//同理 
{ 
if(image.height > H) 
{ 
imageDest.height = H; 
imageDest.width = (image.width*H)/image.height; 
} 
else 
{ 
imageDest.width = image.width; 
imageDest.height = image.height; 
} 
} 
} 
}

以上函数对图片进行缩放。
golf网站的每张缩略图的id都设为imgProductItem,如:<img src="<%= imgPath %>" name="imgProductItem" width="150" height="113" border="0" id="imgProductItem" />,里面的150x113就是显示框的最大尺寸,因为处理函数必须在onload完成时运行,所以这里必须设置一定的大小,要不整个页面在载入图片过程中出现排版错乱,到运行了RsizeAllImageById才恢复正常。
添加一个批量操作的函数:
//将页面内所有指定id的图片按比例缩放 
function RsizeAllImageById(id, W, H) 
{ 
var imgs = document.getElementsByTagName("img"); 
for(var i=0; i<imgs.length; i++) 
{ 
if(imgs[i].id == id) 
{ 
ResizeImage(imgs[i], W, H); 
} 
} 
}

这样在页面的body添加
<body onload="javascript:init();">;在head区添加: <mce:script language="javascript"><!-- 
function init() 
{ 
RsizeAllImageById("imgProductItem", 150, 113); 
} 
// --></mce:script>

就可以将所有图片显示成缩略图了。
Javascript 相关文章推荐
JS 进度条效果实现代码整理
May 21 Javascript
简单的jquery拖拽排序效果实现代码
Sep 20 Javascript
jQuery Tools tab(幻灯片)
Jul 14 Javascript
js返回上一页并刷新代码整理
Dec 21 Javascript
JS实现鼠标单击与双击事件共存
Mar 08 Javascript
JavaScript生成福利彩票双色球号码
May 15 Javascript
jQuery删除当前节点元素
Dec 07 Javascript
解析利用javascript如何判断一个数为素数
Dec 08 Javascript
Html中 IFrame的用法及注意点
Dec 22 Javascript
如何将 jQuery 从你的 Bootstrap 项目中移除(取而代之使用Vue.js)
Jul 17 jQuery
详解js的作用域、预解析机制
Feb 05 Javascript
在vue中给后台接口传的值为数组的格式代码
Nov 12 Javascript
html向js方法传递参数具体实现
Aug 08 #Javascript
js获取控件位置以及不同浏览器中的差别介绍
Aug 08 #Javascript
用JavaScript计算在UTF-8下存储字符串占用字节数
Aug 08 #Javascript
Jquery chosen动态设置值实例介绍
Aug 08 #Javascript
extjs两个tbar问题探讨
Aug 08 #Javascript
JS实现随机数生成算法示例代码
Aug 08 #Javascript
判断是否安装flash player及当前版本的JS代码
Aug 08 #Javascript
You might like
PHP连接SQLSERVER 注意事项(附dll文件下载)
2012/06/28 PHP
php引用返回与取消引用的详解
2013/06/08 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
2014/04/29 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
php smtp实现发送邮件功能
2017/06/22 PHP
php 中phar包的使用教程详解
2018/10/26 PHP
出现“不能执行已释放的Script代码”错误的原因及解决办法
2007/08/29 Javascript
javascript 写类方式之三
2009/07/05 Javascript
JS冒泡事件的快速解决方法
2013/12/16 Javascript
js+css绘制颜色动态变化的圈中圈效果
2016/01/27 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
js图片切换具体实现代码
2016/10/13 Javascript
layDate插件设置开始和结束时间
2018/11/15 Javascript
详解JavaScript中的强制类型转换
2019/04/15 Javascript
Echarts地图添加引导线效果(labelLine)
2019/09/30 Javascript
vue指令v-html使用过滤器filters功能实例
2019/10/25 Javascript
JS JQuery获取data-*属性值方法解析
2020/09/01 jQuery
我所理解的JavaScript中的this指向
2020/09/04 Javascript
[37:02]OG vs INfamous 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python记录详细调用堆栈日志的方法
2015/05/05 Python
Python爬虫抓取手机APP的传输数据
2016/01/22 Python
python SMTP实现发送带附件电子邮件
2018/05/22 Python
python使用numpy读取、保存txt数据的实例
2018/10/14 Python
Python Django view 两种return的实现方式
2020/03/16 Python
python合并多个excel文件的示例
2020/09/23 Python
Python中免验证跳转到内容页的实例代码
2020/10/23 Python
大专生工程监理求职信
2013/10/04 职场文书
家长会主持词
2014/03/26 职场文书
毕业生就业协议书
2014/04/11 职场文书
大四毕业生自荐书
2014/07/05 职场文书
后勤管理员岗位职责
2014/08/27 职场文书
活动总结结尾怎么写
2014/08/30 职场文书
民主评议教师党员自我评价
2015/03/04 职场文书
客户付款通知书
2015/04/23 职场文书
2015年统战工作总结
2015/05/19 职场文书
创业分两种人:那么哪些适合创业?,哪些适合不适合创业呢?
2019/08/23 职场文书