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 相关文章推荐
jquery text,radio,checkbox,select操作实现代码
Jul 09 Javascript
jQuery中的常用事件总结
Dec 27 Javascript
input的focus方法使用
Mar 13 Javascript
JS操作HTML自定义属性的方法
Feb 10 Javascript
js实现横向伸展开的二级导航菜单代码
Aug 28 Javascript
实例讲解js验证表单项是否为空的方法
Jan 09 Javascript
jQuery选择器总结之常用元素查找方法
Aug 04 Javascript
通过jquery实现页面的动画效果(实例代码)
Sep 18 Javascript
AngularJS自定义插件实现网站用户引导功能示例
Nov 07 Javascript
JS+Canvas实现的俄罗斯方块游戏完整实例
Dec 12 Javascript
Node.js中文件操作模块File System的详细介绍
Jan 05 Javascript
使用vue-router在Vue页面之间传递数据的方法
Jul 15 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 in_array 函数使用说明与in_array需要注意的地方说明
2010/04/13 PHP
PHP读取数据库并按照中文名称进行排序实现代码
2013/01/29 PHP
smarty高级特性之过滤器的使用方法
2015/12/25 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
PHP join()函数用法与实例讲解
2019/03/11 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
2019/07/22 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
jQuery的图片滑块焦点图插件整理推荐
2014/12/07 Javascript
JavaScript插件化开发教程(六)
2015/02/01 Javascript
JavaScript中实现map功能代码分享
2015/06/11 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
2016/06/08 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
微信小程序 this和that详解及简单实例
2017/02/13 Javascript
Jil,高效的json序列化和反序列化库
2017/02/15 Javascript
JS控件bootstrap suggest plugin使用方法详解
2017/03/25 Javascript
浅谈webpack 自动刷新与解析
2018/04/09 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
2018/09/28 Javascript
详解vuex 渐进式教程实例代码
2018/11/27 Javascript
详解auto-vue-file:一个自动创建vue组件的包
2019/04/26 Javascript
微信小程序 轮播图实现原理及优化详解
2019/09/29 Javascript
解决Vue中使用keepAlive不缓存问题
2020/08/04 Javascript
js实现Element中input组件的部分功能并封装成组件(实例代码)
2021/03/02 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访-EG篇
2018/04/03 DOTA
Python多线程实现同步的四种方式
2017/05/02 Python
Python绘制正余弦函数图像的方法
2018/08/28 Python
Python编程深度学习绘图库之matplotlib
2018/12/28 Python
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
python装饰器代替set get方法实例
2019/12/19 Python
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
Python实现在Windows平台修改文件属性
2020/03/05 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
HTML5给汉字加拼音收起展开组件的实现代码
2020/04/08 HTML / CSS
高品质和独特的产品世界:Creations and Collections
2018/01/07 全球购物
火车来了教学反思
2014/02/11 职场文书
六五普法先进个人主要事迹材料
2015/11/03 职场文书
话题作文之呼唤
2019/12/18 职场文书