关于图片按比例自适应缩放的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 封装Ajax传递的数据代码
Jun 05 Javascript
Js 中debug方式
Feb 07 Javascript
jQuery ajax BUG:object doesn't support this property or method
Jul 06 Javascript
jquery 中多条件选择器,相对选择器,层次选择器的区别
Jul 03 Javascript
原生javascript兼容性测试实例
Jul 01 Javascript
js实现头像图片切割缩放及无刷新上传图片的方法
Jul 17 Javascript
js实现跨域的4种实用方法原理分析
Oct 29 Javascript
javascript添加前置0(补零)的几种方法
Jan 05 Javascript
js前端实现图片懒加载(lazyload)的两种方式
Apr 24 Javascript
jQuery使用bind函数实现绑定多个事件的方法
Oct 11 jQuery
解决layui下拉框监听问题(监听不到值的变化)
Sep 28 Javascript
原生js实现随机点餐效果
Dec 10 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与javascript对多项选择的处理
2006/10/09 PHP
php下正则来匹配dede模板标签的代码
2010/08/21 PHP
PHP 伪静态技术原理以及突破原理实现介绍
2013/07/12 PHP
ThinkPHP中使用Ueditor富文本编辑器
2015/09/02 PHP
php use和include区别总结
2019/10/13 PHP
JavaScript 使用技巧精萃(.net html
2009/04/25 Javascript
JS小功能(setInterval实现图片效果显示时间)实例代码
2013/11/28 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
JavaScript函数详解
2014/11/17 Javascript
jQuery仿gmail实现fixed布局的方法
2015/05/27 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
2016/05/26 Javascript
JS正则表达式修饰符global(/g)用法分析
2016/12/27 Javascript
jquery Form轻松实现文件上传
2017/05/24 jQuery
vue-ajax小封装实例
2017/09/18 Javascript
jquery实现企业定位式导航效果
2018/01/01 jQuery
vue.js获得当前元素的文字信息方法
2018/03/09 Javascript
如何解决React官方脚手架不支持Less的问题(小结)
2018/09/12 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
2018/11/23 Javascript
JavaScript判断对象和数组的两种方法
2019/05/31 Javascript
理解Python中的绝对路径和相对路径
2017/08/30 Python
Python解析并读取PDF文件内容的方法
2018/05/08 Python
python 通过麦克风录音 生成wav文件的方法
2019/01/09 Python
python实现广度优先搜索过程解析
2019/10/19 Python
Python 脚本实现淘宝准点秒杀功能
2019/11/13 Python
python获取依赖包和安装依赖包教程
2020/02/13 Python
TensorFlow2.1.0最新版本安装详细教程
2020/04/08 Python
python 用opencv实现图像修复和图像金字塔
2020/11/27 Python
趣天网日本站:Qoo10 JP
2019/09/18 全球购物
SCHIESSER荷兰官方网站:德国内衣专家
2020/10/09 全球购物
商务邀请函范文
2014/01/14 职场文书
文明城市创建标语
2014/06/16 职场文书
中学教师暑期培训方案
2014/08/27 职场文书
见习报告格式要求
2014/11/04 职场文书
关于幸福的感言
2015/08/03 职场文书
如何在CSS中绘制曲线图形及展示动画
2021/05/24 HTML / CSS
Java实现学生管理系统(IO版)
2022/02/24 Java/Android