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图片画廊插件 推荐
May 12 Javascript
修复IE9&amp;safari 的sort方法
Oct 21 Javascript
js 编码转换 gb2312 和 utf8 互转的2种方法
Aug 07 Javascript
Javascript改变CSS样式(局部和全局)
Dec 18 Javascript
JavaScript中具名函数的多种调用方式总结
Nov 08 Javascript
jQuery Mobile 触摸事件实例
Jun 04 Javascript
JS实现前端缓存的方法
Sep 21 Javascript
vue的toast弹窗组件实例详解
May 14 Javascript
Vuejs开发环境搭建及热更新【推荐】
Sep 07 Javascript
微信小程序实现3D轮播图效果(非swiper组件)
Sep 21 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
Jan 18 Javascript
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
Apr 19 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写的获取各搜索蜘蛛爬行记录代码
2012/08/21 PHP
PHP合并数组+号和array_merge的区别
2015/06/25 PHP
PHP 前加at符合@的作用解析
2015/07/31 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
在网页里看flash的trace数据的js类
2009/01/10 Javascript
JS Loading功能的简单实现
2013/11/29 Javascript
js通过location.search来获取页面传来的参数
2014/09/11 Javascript
浏览器缩放检测的js代码
2014/09/28 Javascript
实现图片预加载的三大方法及优缺点分析
2014/11/19 Javascript
jQuery实现统计输入文字个数的方法
2015/03/11 Javascript
JavaScript制作淘宝星级评分效果的思路
2020/06/23 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
2015/11/26 Javascript
jquery实现具有收缩功能的垂直导航菜单
2016/02/16 Javascript
js操作数据库实现注册和登陆的简单实例
2016/05/26 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
JavaScript实现移动端页面按手机屏幕分辨率自动缩放的最强代码
2017/08/18 Javascript
vue实现仿淘宝结账页面实例代码
2017/11/08 Javascript
vue+vuex+axios+echarts画一个动态更新的中国地图的方法
2017/12/19 Javascript
记录一次完整的react hooks实践
2019/03/11 Javascript
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
jQuery分组选择器简单用法示例
2019/04/04 jQuery
详解Vue调用手机相机和相册以及上传
2019/05/05 Javascript
python解析html开发库pyquery使用方法
2014/02/07 Python
使用django-crontab实现定时任务的示例
2018/02/26 Python
Python lxml模块的基本使用方法分析
2019/12/21 Python
如何利用pygame实现简单的五子棋游戏
2019/12/29 Python
html5 video标签屏蔽右键视频另存为的js代码
2013/11/12 HTML / CSS
深入理解HTML5定时器requestAnimationFrame的使用
2018/12/12 HTML / CSS
介绍一下MD5加密算法
2016/11/12 面试题
年会搞笑主持词串词
2014/03/24 职场文书
学生会主席演讲稿
2014/04/25 职场文书
cf战队收人口号
2014/06/21 职场文书
2015年大学班级工作总结
2015/04/28 职场文书
公司环境卫生管理制度
2015/08/05 职场文书
原生JavaScript实现简单五子棋游戏
2021/06/28 Javascript
SpringBoot集成MongoDB实现文件上传的步骤
2022/04/18 MongoDB