关于图片按比例自适应缩放的js代码


Posted in Javascript onOctober 30, 2011

如下图。

关于图片按比例自适应缩放的js代码

瞄了一下,居中可以用 text-align:center; 来实现。而按比例缩放,利用预设 <img /> 的 width 、height 属性解决不了。因为用户图片可能是很长的,也可能是很宽的。在线上想了一下他们的关系,按条件来判断是这样的:

if(实际宽度 > 预览最大宽度) { 
缩放宽度 = 预览最大宽度 
} if(实际高度 > 预览最大高度) { 
缩放高度 = 预览最大高度 
}

但是这样会有问题,比如当宽度和高度都被缩放,如果缩放比较不同,图片就不是按比例缩放,会变得非常丑。为了让它按比例缩放,就需要做各种判断了。那这样就违背了我们希望程序自动化的原则了。再想想,虽然不喜欢数学,但数学还是很好用的,应该有其他办法。而既然是按比例缩放,何不用实际图像和预览区域宽度作的比例来计算他们关系?hmmmm… 果然 OK。实际上我们永远都只需要缩放宽度或高度中的其中一个。因为比例只有大和小种情况。具体的,写一个函数来实现它吧:
/** 
* 图片按比例自适应缩放 
* @param img {Element} 用户上传的图片 
* @param maxWidth {Number} 预览区域的最大宽度 
* @param maxHeight {Number} 预览区域的最大高度 
*/ var resizeImg = function(img, maxWidth, maxHeight){ 
var w = img.width, 
h = img.height; 
// 当图片比预览区域小时不做任何改变 
if(w < maxWidth && h < maxHeight) return; 
// 当实际图片比例大于预览区域宽高比例时 
// 缩放图片宽度,反之缩放图片宽度 
w/h > maxWidth/maxHeight ? img.width = maxWidth : img.height = maxHeight; 
};

完整的测试代码:
<!DOCTYPE HTML> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>图片按比例自适应缩放</title> 
<style> 
.cnt{text-align:center;width:600px;height:350px;margin:0 auto;border:1px solid #ddd;} 
</style> 
</head> 
<body> 
<div class="cnt"> 
<img id="img" src="http://www.wallcoo.com/1920x1440/1920x1440_nature_wallpapers_02/wallpapers/1920x1440/%5Bwallcoo.com%5D_1920X1440_nature_wallpapers_aVistas005.jpg" alt="alipay" /> 
<br /> 
<a href="http://www.wallcoo.com/1920x1440/1920x1440_nature_wallpapers_02/wallpapers/1920x1440/%5Bwallcoo.com%5D_1920X1440_nature_wallpapers_aVistas005.jpg" rel="nofollow">查看原图</a> || <a href="http://sofish.de/1679" title="关于图片按比例自适应缩放">返回文章:关于图片按比例自适应缩放 »</a> 
</div> 
<script> 
window.onload = function() { 
var img = document.getElementById('img'), 
/** 
* 图片按比例自适应缩放 
* @param img {Element} 用户上传的图片 
* @param maxWidth {Number} 预览区域的最大宽度 
* @param maxHeight {Number} 预览区域的最大高度 
*/ 
resizeImg = function(img, maxWidth, maxHeight){ 
var w = img.width, 
h = img.height; 
// 当图片比预览区域小时不做任何改变 
if(w < maxWidth && h < maxHeight) return; 
// 当实际图片比例大于预览区域宽高比例时 
// 缩放图片宽度,反之缩放图片宽度 
w/h > maxWidth/maxHeight ? img.width = maxWidth : img.height = maxHeight; 
}; 
resizeImg(img, 500, 300); 
} 
</script> 
</body> 
</html>
Javascript 相关文章推荐
基于jquery的无刷新分页技术
Jun 11 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
Jul 23 Javascript
密码强度检测效果实现原理与代码
Jan 04 Javascript
JQuery EasyUI 数字格式化处理示例
May 05 Javascript
初识SmartJS - AOP三剑客
Jun 08 Javascript
js实现防止被iframe的方法
Jul 03 Javascript
JavaScript声明变量名的语法规则
Jul 10 Javascript
javascript常用函数(1)
Nov 04 Javascript
js浏览器html5表单验证
Oct 17 Javascript
详解axios在node.js中的post使用
Apr 27 Javascript
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
Oct 26 Javascript
webpack引入eslint配置详解
Jan 22 Javascript
js 弹出菜单/窗口效果
Oct 30 #Javascript
基于Jquery+Ajax+Json的高效分页实现代码
Oct 29 #Javascript
简单的前端js+ajax 购物车框架(入门篇)
Oct 29 #Javascript
分享一个自己写的table表格排序js插件(高效简洁)
Oct 29 #Javascript
Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
Oct 29 #Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
Oct 29 #Javascript
基于jquery的无限级联下拉框js插件
Oct 29 #Javascript
You might like
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
2016/05/13 PHP
php自定义函数实现二维数组按指定key排序的方法
2016/09/29 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
2016/11/25 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
2019/05/06 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
2020/10/28 PHP
javascript学习网址备忘
2007/05/29 Javascript
深入理解JavaScript系列(6) 强大的原型和原型链
2012/01/15 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
2012/10/29 Javascript
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
Document:getElementsByName()使用方法及示例
2013/10/28 Javascript
js函数调用的方式
2014/05/06 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
早该知道的7个JavaScript技巧
2016/06/21 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
2016/09/27 Javascript
jquery pagination分页插件使用详解(后台struts2)
2017/01/22 Javascript
原生js的ajax和解决跨域的jsonp(实例讲解)
2017/10/16 Javascript
解决vue中对象属性改变视图不更新的问题
2018/02/23 Javascript
JavaScript解析JSON数据示例
2019/07/16 Javascript
python 切片和range()用法说明
2013/03/24 Python
Python基于win32ui模块创建弹出式菜单示例
2018/05/09 Python
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
Python使用try except处理程序异常的三种常用方法分析
2018/09/05 Python
python将txt文件读入为np.array的方法
2018/10/30 Python
利用Python求阴影部分的面积实例代码
2018/12/05 Python
python自定义函数实现一个数的三次方计算方法
2019/01/20 Python
Python的matplotlib绘图如何修改背景颜色的实现
2019/07/16 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
施华洛世奇德国官网:SWAROVSKI德国
2017/02/01 全球购物
this关键字的作用
2016/01/30 面试题
培训研修方案
2014/06/06 职场文书
淘宝店策划方案
2014/06/07 职场文书
刑事上诉状范文
2015/05/22 职场文书
法制工作总结2015
2015/07/23 职场文书
求职信:求职应该注意的问题
2019/04/24 职场文书
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
2022/04/24 Java/Android