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 学习笔记(九)call和apply方法
Jan 11 Javascript
js 跳出页面的frameset框架示例介绍
Dec 23 Javascript
Egret引擎开发指南之创建项目
Sep 03 Javascript
jQuery老黄历完整实现方法
Jan 16 Javascript
javascript实现完美拖拽效果
May 06 Javascript
javascript中mouseover、mouseout使用详解
Jul 19 Javascript
Jquery为DIV添加click事件的简单实例
Jun 02 Javascript
vue中v-model动态生成的实例详解
Oct 27 Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
Jul 30 Javascript
Vue.js 事件修饰符的使用教程
Nov 01 Javascript
js 判断当前时间是否处于某个一个时间段内
Sep 19 Javascript
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
May 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
先进的自动咖啡技术,真的可以取代咖啡师吗?
2021/03/06 冲泡冲煮
PHP利用Cookie设置用户30分钟未操作自动退出功能
2017/07/03 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
PHP7 参数处理机制修改
2021/03/09 PHP
event对象的方法 兼容多浏览器
2009/06/27 Javascript
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
2009/08/09 Javascript
js禁止页面使用右键(简单示例代码)
2013/11/13 Javascript
基于socket.io和node.js搭建即时通信系统
2014/07/30 Javascript
JS+CSS实现仿支付宝菜单选中效果代码
2015/09/25 Javascript
第二篇Bootstrap起步
2016/06/21 Javascript
浅谈toLowerCase和toLocaleLowerCase的区别
2016/08/15 Javascript
Vue.js开发环境搭建
2016/11/10 Javascript
JS实现合并json对象的方法
2017/10/10 Javascript
浅谈vue-cli 3.0.x 初体验
2018/04/11 Javascript
关于Vue组件库开发详析
2018/07/01 Javascript
React+Webpack快速上手指南(小结)
2018/08/15 Javascript
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
Python对数据库操作
2016/03/28 Python
python3 打开外部程序及关闭的示例
2018/11/06 Python
Django项目使用ckeditor详解(不使用admin)
2019/12/17 Python
python中的线程threading.Thread()使用详解
2019/12/17 Python
python logging.basicConfig不生效的原因及解决
2020/02/20 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
2020/03/24 Python
html5配合css3实现带提示文字的输入框(摆脱js)
2013/03/08 HTML / CSS
基于 HTML5 WebGL 实现的医疗物流系统
2019/10/08 HTML / CSS
印度尼西亚最大和最全面的网络商城:Blibli.com
2017/10/04 全球购物
Oracle的内存结构(Memory structures)
2015/06/10 面试题
新领导上任欢迎词
2014/01/13 职场文书
财务总监岗位职责
2014/03/07 职场文书
大学生村官演讲稿
2014/04/25 职场文书
科长竞争上岗演讲稿
2014/05/12 职场文书
不同意离婚上诉状
2015/05/23 职场文书
风之谷观后感
2015/06/11 职场文书
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS
基于Pygame实现简单的贪吃蛇游戏
2021/12/06 Python
SpringBoot Http远程调用的方法
2022/08/14 Java/Android