关于图片按比例自适应缩放的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.extend 函数详解
Feb 03 Javascript
qTip2 精致的基于jQuery提示信息插件
Feb 17 Javascript
jQuery如何防止这种冒泡事件发生
Feb 27 Javascript
JavaScript DSL 流畅接口(使用链式调用)实例
Mar 15 Javascript
javascript多行字符串的简单实现方式
May 04 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
May 13 jQuery
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
Jul 09 Javascript
jQuery Validate插件ajax方式验证输入值的实例
Dec 21 jQuery
如何解决js函数防抖、节流出现的问题
Jun 17 Javascript
JavaScript使用表单元素验证表单的示例代码
Aug 20 Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
Apr 15 Javascript
如何使用CocosCreator对象池
Apr 14 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
PHP序列号生成函数和字符串替换函数代码
2012/06/07 PHP
php实现点击可刷新验证码
2015/11/07 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
js arguments,jcallee caller用法总结
2013/11/30 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
js实现class样式的修改、添加及删除的方法
2015/01/20 Javascript
js原型链与继承解析(初体验)
2016/05/09 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
2016/09/21 Javascript
基于js实现checkbox批量选中操作
2016/11/22 Javascript
详解在Node.js中发起HTTP请求的5种方法
2019/01/10 Javascript
vue+iview动态渲染表格详解
2019/03/19 Javascript
微信小程序实现手势滑动卡片效果
2019/08/26 Javascript
vue.js的简单自动求和计算实例
2019/11/08 Javascript
python实现ipsec开权限实例
2014/11/11 Python
python实现分析apache和nginx日志文件并输出访客ip列表的方法
2015/04/04 Python
Python正则表达式知识汇总
2017/09/22 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
linux下python使用sendmail发送邮件
2018/05/22 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
2019/08/01 Python
Python迭代器模块itertools使用原理解析
2019/12/11 Python
浅谈matplotlib 绘制梯度下降求解过程
2020/07/12 Python
python/golang实现循环链表的示例代码
2020/09/14 Python
python单例模式的应用场景实例讲解
2021/02/24 Python
Linux上比较文件的命令都有哪些
2013/09/28 面试题
高考自主招生自荐信
2013/10/20 职场文书
教师自荐信范文
2013/12/09 职场文书
自我评价个人范文
2013/12/16 职场文书
应届生求职自荐信
2014/07/04 职场文书
考试作弊检讨
2015/01/27 职场文书
学生逃课检讨书
2015/02/17 职场文书
2015年毕业生实习评语
2015/03/25 职场文书
培训讲师开场白
2015/06/01 职场文书
CSS3 制作的悬停缩放特效
2021/04/13 HTML / CSS
Python数据分析之pandas函数详解
2021/04/21 Python
吃通javascript正则表达式
2021/04/21 Javascript