JS网页图片按比例自适应缩放实现方法


Posted in Javascript onJanuary 15, 2014

用户上传照片,照片的尺寸未知;需要生成一个预览,这个预览图要根据提供给用户预览的区域自应用,并且居中;如果图片太大,需要按比例缩放。如下图。

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;
Javascript 相关文章推荐
把jQuery的类、插件封装成seajs的模块的方法
Mar 12 Javascript
jquery图片切换插件
Mar 16 Javascript
js鼠标点击图片切换效果代码分享
Aug 26 Javascript
JavaScript图像延迟加载库Echo.js
Apr 05 Javascript
学JavaScript七大注意事项【必看】
May 04 Javascript
vue.js的安装方法
May 12 Javascript
使用Node.js实现RESTful API的示例
Aug 01 Javascript
基于Vue实现页面切换左右滑动效果
Jun 29 Javascript
JS实现电商放大镜效果
Aug 24 Javascript
微信小程序商品详情页规格属性选择示例代码
Oct 30 Javascript
详解vue+vuex+koa2开发环境搭建及示例开发
Jan 22 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
Jul 17 Javascript
javascript删除字符串最后一个字符
Jan 14 #Javascript
javascript制作loading动画效果 loading效果
Jan 14 #Javascript
导入extjs、jquery 文件时$使用冲突问题解决方法
Jan 14 #Javascript
如何动态的导入js文件具体该怎么实现
Jan 14 #Javascript
将查询条件的input、select清空
Jan 14 #Javascript
js导出txt示例代码
Jan 14 #Javascript
javascript 通用loading动画效果实例代码
Jan 14 #Javascript
You might like
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
php模板引擎技术简单实现
2016/03/15 PHP
PHP文件操作实例总结【文件上传、下载、分页】
2018/12/08 PHP
js同时按下两个方向键
2007/12/01 Javascript
再谈javascript 动态添加样式规则 W3C校检
2009/12/25 Javascript
Textbox控件注册回车事件及触发按钮提交事件具体实现
2013/03/04 Javascript
批量实现面向对象的实例代码
2013/07/01 Javascript
使用jQuery管理选择结果
2015/01/20 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
AngularJS学习笔记之ng-options指令
2015/06/16 Javascript
jQuery+css实现的tab切换标签(兼容各浏览器)
2016/01/28 Javascript
dedecms页面如何获取会员状态的实例代码
2016/03/15 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
2017/01/04 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
2017/06/13 Javascript
javascript实现循环广告条效果
2017/12/12 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
Vue实现回到顶部和底部动画效果
2019/07/31 Javascript
layui数据表格 table.render 报错的解决方法
2019/09/29 Javascript
详解为什么Vue中不要用index作为key(diff算法)
2020/04/04 Javascript
[04:13]2018国际邀请赛典藏宝瓶Ⅱ饰品一览
2018/07/21 DOTA
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
python Spyder界面无法打开的解决方法
2018/04/27 Python
Python Numpy计算各类距离的方法
2019/07/05 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
2019/08/27 Python
python的slice notation的特殊用法详解
2019/12/27 Python
浅谈CSS3 动画卡顿解决方案
2019/01/02 HTML / CSS
电子商务系毕业生自荐信
2014/05/29 职场文书
领导干部保密承诺书
2014/08/30 职场文书
预备党员群众路线思想汇报2014
2014/10/25 职场文书
2014年工商所工作总结
2014/12/09 职场文书
检讨书模板大全
2015/05/07 职场文书
初中生物教学反思
2016/02/20 职场文书
完美解决golang go get私有仓库的问题
2021/05/05 Golang
NodeJs使用webpack打包项目的方法详解
2022/02/28 NodeJs
Python进程间的通信之语法学习
2022/04/11 Python