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之十四 (触发事件核心方法)
Aug 23 Javascript
jquery ajax,ashx,json的用法总结
Feb 12 Javascript
原生js仿jq判断当前浏览器是否为ie,精确到ie6~8
Aug 30 Javascript
JavaScript中使用document.write向页面输出内容实例
Oct 16 Javascript
js使用心得分享
Jan 13 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
Feb 17 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
Nov 09 Javascript
jQuery插件简单学习实例教程
Jul 01 Javascript
jquery编写日期选择器
Mar 16 Javascript
Vue实现购物车功能
Apr 27 Javascript
微信提示 在浏览器打开 效果实现过程解析
Sep 10 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
Jan 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
人工智能开始玩《星际争霸2》 你的操作跟得上吗?
2017/08/11 星际争霸
PHP计划任务之关闭浏览器后仍然继续执行的函数
2010/07/22 PHP
ajax取消挂起请求的处理方法
2013/03/18 PHP
两种php给图片加水印的实现代码
2020/04/18 PHP
2款PHP无限级分类实例代码
2015/11/11 PHP
Yii rules常用规则示例
2016/03/15 PHP
Yii2 rbac权限控制操作步骤实例教程
2016/04/29 PHP
PHP 文件锁与进程锁的使用示例
2017/08/07 PHP
js停止输出代码
2008/07/20 Javascript
js移除事件 js绑定事件实例应用
2012/11/28 Javascript
js获取触发事件元素在整个网页中的绝对坐标(示例代码)
2013/12/13 Javascript
javascript中的原型链深入理解
2014/02/24 Javascript
JavaScript实现的一个计算数字步数的算法分享
2014/12/06 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
2016/02/23 Javascript
onclick和onblur冲突问题的快速解决方法
2016/04/28 Javascript
总结jQuery插件开发中的一些要点
2016/05/16 Javascript
Js操作DOM元素及获取浏览器高宽的简单方法
2016/09/08 Javascript
Javascript同时声明一连串(多个)变量的方法
2017/01/23 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
2017/04/07 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
2017/09/22 jQuery
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
2017/12/06 Javascript
微信小程序radio组件使用详解
2018/01/31 Javascript
浅谈使用nodejs搭建web服务器的过程
2020/07/20 NodeJs
Jquery $.map使用方法实例详解
2020/09/01 jQuery
Vue实现小购物车功能
2020/12/21 Vue.js
Python获取本机所有网卡ip,掩码和广播地址实例代码
2018/01/22 Python
python删除不需要的python文件方法
2018/04/24 Python
flask中的wtforms使用方法
2018/07/21 Python
python利用pandas将excel文件转换为txt文件的方法
2018/10/23 Python
解决python中画图时x,y轴名称出现中文乱码的问题
2019/01/29 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
环境科学专业大学生自荐信格式
2013/09/21 职场文书
厂区绿化方案
2014/05/08 职场文书
委托代理人授权委托书范本
2014/09/24 职场文书
反腐倡廉剖析材料
2014/09/30 职场文书
邓小平文选读书笔记
2015/06/29 职场文书