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中的对象和数组的应用技巧
Jan 07 Javascript
JavaScript传递变量: 值传递?引用传递?
Feb 22 Javascript
jquery统计用户选中的复选框的个数
Jun 06 Javascript
jQuery简易图片放大特效示例代码
Jun 09 Javascript
JS 新增Cookie 取cookie值 删除cookie 举例详解
Oct 10 Javascript
js网页滚动条滚动事件实例分析
May 05 Javascript
基于jQuery Tipso插件实现消息提示框特效
Mar 16 Javascript
微信公众号开发 实现点击返回按钮就返回到聊天界面
Dec 15 Javascript
Easyui和zTree两种方式分别实现树形下拉框
Aug 04 Javascript
前端开发之便利店收银系统代码
Dec 27 Javascript
JS造成内存泄漏的几种情况实例分析
Mar 02 Javascript
如何解决vue在ios微信&quot;复制链接&quot;功能问题
Mar 26 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 Hash函数,增强密码安全
2011/02/25 PHP
CI框架中通过hook的方式实现简单的权限控制
2015/01/07 PHP
PHP简单留言本功能实现代码
2017/06/09 PHP
php7安装mongoDB扩展的方法分析
2017/08/02 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
对YUI扩展的Gird组件 Part-1
2007/03/10 Javascript
Javascript计算时间差的函数分享
2011/07/04 Javascript
js中eval()函数和trim()去掉字符串左右空格应用
2013/02/02 Javascript
JavaScript中提前声明变量或函数例子
2014/11/12 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
2016/05/17 Javascript
js enter键激发事件实例代码
2016/08/17 Javascript
Angular 常用指令实例总结整理
2016/12/13 Javascript
关于JS Lodop打印插件打印Bootstrap样式错乱问题的解决方案
2016/12/23 Javascript
jQuery EasyUI Panel面板组件使用详解
2017/02/28 Javascript
JS正则表达式判断有效数实例代码
2017/03/13 Javascript
浅谈基于Vue.js的移动组件库cube-ui
2017/12/20 Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
2018/10/24 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
jQuery表单元素过滤选择器用法实例分析
2019/02/20 jQuery
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
python多线程编程方式分析示例详解
2013/12/06 Python
python实现自动登录人人网并访问最近来访者实例
2014/09/26 Python
Python中字典创建、遍历、添加等实用操作技巧合集
2015/06/02 Python
python 实现对数据集的归一化的方法(0-1之间)
2018/07/17 Python
Python基础学习之类与实例基本用法与注意事项详解
2019/06/17 Python
python爬虫增加访问量的方法
2019/08/22 Python
Python之Class&amp;Object用法详解
2019/12/25 Python
Python如何输出百分比
2020/07/31 Python
Selenium 安装和简单使用的实现
2020/12/04 Python
Move Free官方海外旗舰店:美国骨关节健康专业品牌
2017/12/06 全球购物
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
做一个有道德的人活动实施方案
2014/08/23 职场文书
班干部学习委员竞选稿
2015/11/20 职场文书
2019最新版火锅店的创业计划书 !
2019/07/12 职场文书
python装饰器代码解析
2022/03/23 Python