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 相关文章推荐
用javascript实现兼容IE7的类库 IE7_0_9.zip提供下载
Aug 08 Javascript
测试JavaScript字符串处理性能的代码
Dec 07 Javascript
js下获得客户端操作系统的函数代码(1:vista,2:windows7,3:2000,4:xp,5:2003,6:2008)
Oct 31 Javascript
自己写的兼容ie和ff的在线文本编辑器类似ewebeditor
Dec 12 Javascript
javascript回车完美实现tab切换功能
Mar 13 Javascript
基于JavaScript实现点击页面任何位置返回
Aug 31 Javascript
同步异步动态引入js文件的几种方法总结
Sep 23 Javascript
angular基于路由控制ui-router实现系统权限控制
Sep 27 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
May 02 Javascript
layui table动态表头 改变表格头部 重新加载表格的方法
Sep 21 Javascript
layer.prompt使文本框为空的情况下也能点击确定的方法
Sep 24 Javascript
toString.call()通用的判断数据类型方法示例
Aug 28 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
PHP 上传文件大小限制
2009/07/05 PHP
PHP递归复制、移动目录的自定义函数分享
2014/11/18 PHP
PHP获取一年有几周以及每周开始日期和结束日期
2015/08/06 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
2017/05/30 PHP
使用PHP+MySql实现微信投票功能实例代码
2017/09/29 PHP
php实现socket推送技术的示例
2017/12/20 PHP
利用javascript中的call实现继承
2007/01/22 Javascript
jMessageBox 基于jQuery的窗口插件
2009/12/09 Javascript
移动节点的jquery代码
2014/01/13 Javascript
按下回车键指向下一个位置的一个函数代码
2014/03/10 Javascript
JavaScript实现页面5秒后自动跳转的方法
2015/04/16 Javascript
JavaScript正则表达式之multiline属性的应用
2015/06/16 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
2015/11/10 Javascript
Bootstrap基本组件学习笔记之面板(14)
2016/12/08 Javascript
jQuery UI仿淘宝搜索下拉列表功能
2017/01/10 Javascript
详解Angular4 路由设置相关
2017/08/26 Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
2018/05/25 Javascript
JavaScript指定断点操作实例教程
2018/09/18 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
2018/09/21 Javascript
ES6 Promise对象概念及用法实例详解
2019/10/15 Javascript
JS寄快递地址智能解析的实现代码
2020/07/16 Javascript
Python中用Ctrl+C终止多线程程序的问题解决
2013/03/30 Python
跟老齐学Python之总结参数的传递
2014/10/10 Python
python3 flask实现文件上传功能
2020/03/20 Python
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
python按键按住不放持续响应的实例代码
2019/07/17 Python
利用python计算时间差(返回天数)
2019/09/07 Python
Python如何使用PIL Image制作GIF图片
2020/05/16 Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
2020/06/04 Python
python二维图制作的实例代码
2020/12/03 Python
HTML5所有标签汇总及标签意义解释
2015/03/12 HTML / CSS
与世界上最好的跑步专业品牌合作:Fleet Feet
2019/03/22 全球购物
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
国际商务系学生个人的自我评价
2013/11/26 职场文书
医院护士的求职信范文
2013/12/26 职场文书