关于图片按比例自适应缩放的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 相关文章推荐
JavaScript DOM 添加事件
Feb 14 Javascript
JavaScript 格式字符串的应用
Mar 29 Javascript
JS实现div居中示例
Apr 17 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
Sep 01 Javascript
jquery用offset()方法获得元素的xy坐标
Sep 06 Javascript
jQuery对象的length属性用法实例
Dec 27 Javascript
JS函数arguments数组获得实际传参数个数的实现方法
May 28 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
Apr 13 Javascript
jquery操作ul的一些操作笔记整理(干货)
Aug 31 jQuery
详解基于mpvue的小程序markdown适配解决方案
May 08 Javascript
在layui中layer弹出层点击事件无效的解决方法
Sep 05 Javascript
VUE中setTimeout和setInterval自动销毁案例
Sep 07 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
打造计数器DIY三步曲(下)
2006/10/09 PHP
初学CAKEPHP 基础教程
2009/11/02 PHP
主流PHP框架的优缺点对比分析
2014/12/25 PHP
PHP实现的猴王算法(猴子选大王)示例
2018/04/30 PHP
使用laravel和ECharts实现折线图效果的例子
2019/10/09 PHP
javaScript - 如何引入js代码
2021/03/09 Javascript
web 页面分页打印的实现
2009/06/22 Javascript
使用javascript创建快捷方式的简单实例
2013/08/09 Javascript
checkbox设置复选框的只读效果不让用户勾选
2013/08/12 Javascript
探讨js字符串数组拼接的性能问题
2014/10/11 Javascript
浅谈javascript的call()、apply()、bind()的用法
2016/02/21 Javascript
jQuery实现ajax的叠加和停止(终止ajax请求)
2016/08/08 Javascript
jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
2016/09/23 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
2016/11/09 Javascript
使用BootStrap进行轮播图的制作
2017/01/06 Javascript
JavaScript之Map和Set_动力节点Java学院整理
2017/06/29 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
Angular.js中window.onload(),$(document).ready()的写法浅析
2017/09/28 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
ES6入门教程之变量的解构赋值详解
2019/04/13 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
微信小程序wx.navigateTo方法里的events参数使用详情及场景
2020/01/07 Javascript
vscode中Vue别名路径提示的实现
2020/07/31 Javascript
Python算法应用实战之栈详解
2017/02/04 Python
使用python进行拆分大文件的方法
2018/12/10 Python
对django中foreignkey的简单使用详解
2019/07/28 Python
图解python全局变量与局部变量相关知识
2019/11/02 Python
Python如何使用正则表达式爬取京东商品信息
2020/06/01 Python
python使用smtplib模块发送邮件
2020/12/17 Python
AmazeUI 点击元素显示全屏的实现
2020/08/25 HTML / CSS
校长就职演讲稿
2014/01/06 职场文书
论文评语大全
2014/04/29 职场文书
网络文明传播志愿者活动方案
2014/08/20 职场文书
综合办公室岗位职责
2015/04/11 职场文书
公司员工离职感言
2015/08/03 职场文书
维护民族团结心得体会2016
2016/01/15 职场文书