关于图片按比例自适应缩放的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 相关文章推荐
语义化 H1 标签
Jan 14 Javascript
javascript 添加和移除函数的通用方法
Oct 20 Javascript
使用隐藏的new来创建对象
Mar 29 Javascript
node.js中的fs.readSync方法使用说明
Dec 17 Javascript
JS实现文字放大效果的方法
Mar 03 Javascript
JavaScript中的原型prototype完全解析
May 10 Javascript
js捕捉键盘事件和按键键值的方法
Oct 10 Javascript
jQuery基于正则表达式的表单验证功能示例
Jan 21 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
Aug 01 jQuery
深入浅析Node环境和浏览器的区别
Aug 14 Javascript
JS栈stack类的实现与使用方法示例
Jan 31 Javascript
微信小程序自定义扫码功能界面的实现代码
Jul 02 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初学者头疼问题总结
2006/10/09 PHP
php 无限分类的树类代码
2009/12/03 PHP
PHP获取http请求的头信息实现步骤
2012/12/16 PHP
php使用function_exists判断函数可用的方法
2014/11/19 PHP
必须收藏的php实用代码片段
2016/02/02 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
2020/03/02 PHP
tp5.1 框架数据库-数据集操作实例分析
2020/05/26 PHP
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
2009/12/27 Javascript
Prototype源码浅析 Enumerable部分(二)
2012/01/18 Javascript
论JavaScript模块化编程
2016/03/07 Javascript
对js eval()函数的一些见解
2016/08/15 Javascript
JavaScript解析JSON格式数据的方法示例
2017/01/24 Javascript
vue货币过滤器的实现方法
2017/04/01 Javascript
ionic3实战教程之随机布局瀑布流的实现方法
2017/12/28 Javascript
详解react关于事件绑定this的四种方式
2018/03/09 Javascript
Vue cli3 库模式搭建组件库并发布到 npm的流程
2018/10/12 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
2019/08/12 Javascript
layui 对弹窗 form表单赋值的实现方法
2019/09/04 Javascript
node.js通过Sequelize 连接MySQL的方法
2020/12/28 Javascript
如何管理Vue中的缓存页面
2021/02/06 Vue.js
python网络编程之数据传输UDP实例分析
2015/05/20 Python
python删除过期文件的方法
2015/05/29 Python
利用Python实现命令行版的火车票查看器
2016/08/05 Python
Python的装饰器使用详解
2017/06/26 Python
Python实现将HTML转换成doc格式文件的方法示例
2017/11/20 Python
python Web flask 视图内容和模板实现代码
2019/08/23 Python
Django框架表单操作实例分析
2019/11/04 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
2020/02/25 Python
自定义html标记替换html5新增元素
2008/10/17 HTML / CSS
html5之Canvas路径绘图、坐标变换应用实例
2012/12/26 HTML / CSS
文明礼貌演讲稿
2014/05/12 职场文书
学校宣传标语
2014/06/18 职场文书
投标授权委托书范文
2014/08/02 职场文书
2015年五四青年节演讲稿
2015/03/18 职场文书
党支部评议意见
2015/06/02 职场文书
跳高加油稿
2015/07/21 职场文书