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 相关文章推荐
jQuery1.4.2与老版本json格式兼容的解决方法
Feb 12 Javascript
简单常用的幻灯片播放实现代码
Sep 25 Javascript
js创建元素(节点)示例
Jan 02 Javascript
js数组如何添加json数据及js数组与json的区别
Oct 27 Javascript
Node.js操作Firebird数据库教程
Mar 04 Javascript
AngularJS 实现弹性盒子布局的方法
Aug 30 Javascript
微信小程序之事件交互操作实例分析
Dec 03 Javascript
微信小程序生成海报分享朋友圈的实现方法
May 06 Javascript
Angular封装表单控件及思想总结
Dec 11 Javascript
Vue页面刷新记住页面状态的实现
Dec 27 Javascript
React实现类似淘宝tab居中切换效果的示例代码
Jun 02 Javascript
解决Vue @submit 提交后不刷新页面问题
Jul 18 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
文章推荐系统(二)
2006/10/09 PHP
用Zend Encode编写开发PHP程序
2010/02/21 PHP
php下拉选项的批量操作的实现代码
2013/10/14 PHP
配置Nginx+PHP的正确思路与过程
2016/05/10 PHP
php将print_r处理后的数据还原为原始数组的解决方法
2016/11/02 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
2016/11/14 PHP
PHP设计模式之策略模式原理与用法实例分析
2019/04/04 PHP
Laravel如何实现自动加载类
2019/10/14 PHP
IE8 原生JSON支持
2009/04/13 Javascript
jQuery 动画弹出窗体支持多种展现方式
2010/04/29 Javascript
js 遍历对象的属性的代码
2011/12/29 Javascript
jQuery实现的感应鼠标悬停图片色彩渐显效果
2015/03/03 Javascript
JavaScript中的this关键字使用详解
2015/08/14 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
2016/01/08 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
2016/01/27 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
jQuery复制节点用法示例(clone方法)
2016/09/08 Javascript
Vue.js中的computed工作原理
2018/03/22 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
2019/07/10 jQuery
微信小程序获取公众号文章列表及显示文章的示例代码
2020/03/10 Javascript
详解node.js创建一个web服务器(Server)的详细步骤
2021/01/15 Javascript
在Python的Flask框架下收发电子邮件的教程
2015/04/21 Python
Python爬取APP下载链接的实现方法
2016/09/30 Python
Python基础知识_浅谈用户交互
2017/05/31 Python
Python实现求数列和的方法示例
2018/01/12 Python
Python 12306抢火车票脚本
2018/02/07 Python
详解python之协程gevent模块
2018/06/14 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
用Python实现BP神经网络(附代码)
2019/07/10 Python
Django urls.py重构及参数传递详解
2019/07/23 Python
Omio意大利:全欧洲低价大巴、火车和航班搜索和比价
2017/12/02 全球购物
馥绿德雅美国官方网站:Rene Furterer头皮护理专家
2019/05/01 全球购物
村党支部书记承诺书
2014/05/29 职场文书
千手观音观后感
2015/06/03 职场文书
MySQL8.0升级的踩坑历险记
2021/11/01 MySQL