Javascript防止图片拉伸的自适应处理方法


Posted in Javascript onDecember 26, 2017

前言

相信大家在日常的web开发中,作为前端经常会遇到处理图片拉伸问题的情况。

例如banner、图文列表、头像等所有和用户或客户自主操作图片上传的地方,而一旦牵扯图片,就会涉及到图片拉伸的问题,当然,在图片上传时做手动裁切,让用户或客户清晰的感知到图片的有效内容才是最优的解决方案,但是在其他各种外在因素下,没有做裁切的话,就需要在前端显示上做处理了,满足在上传任意大小图片的情况下,最优显示效果的需求。

这时我们需要考虑到极端效果,如下图:

Javascript防止图片拉伸的自适应处理方法

而我们想要得到的效果是这样的------

Javascript防止图片拉伸的自适应处理方法

把图片放进框框,要几步?三步...我们开始

第一步:先画个框框 (这里顺便安利一种自适应框框的方法)

// 假定需要一个在750px屏幕下宽400px,高280px的盒子
// 宽度 = 400 / 750 = 0.5333
// 高度 = 280 / 400 * 0.5333 = 0.3733
<style>
 .img-box{
  position: relative;
  width: 53.33%;
  height: 0;
  padding-bottom: 37.33%;
  overflow: hidden;
  background-color: #eee;
 }
</style>

<body>
 <div id="list">
  <div class="img-box">
   <img src="..."/>
  </div>
 </div>
</body>

第二步:设置图片需要使用到的css

<style>
 .width{
  position: absolute !important;
  width: 100% !important;
  min-height: 100% !important;
  top: 50% !important;
  transform: translateY(-50%) !important;
  -ms-transform: translateY(-50%) !important;
  -moz-transform: translateY(-50%) !important;
  -webkit-transform: translateY(-50%) !important;
  -o-transform: translateY(-50%) !important;
  display: block;
 }
 .height{
  position: absolute !important;
  height: 100% !important;
  min-width: 100% !important;
  left: 50% !important;
  transform: translateX(-50%) !important;
  -ms-transform: translateX(-50%) !important;
  -moz-transform: translateX(-50%) !important;
  -webkit-transform: translateX(-50%) !important;
  -o-transform: translateX(-50%) !important;
  display: block;
 }
</style>

第三步:js获取图片高度比较并给img添加类名

//需要注意的是,不能在css中直接给img设置宽度和高度
//否则在img.onload后获取的宽高是css设置的宽高
//同时建议使用dom对象来获取img标签
<script>
 var list = document.getElementById('list');
 getImgWH ( list );
 //执行宽高比对并设置img类名
 function getImgWH ( Obj ) {
  var img = Obj.getElementsByTagName('img');
  for( var i=0 ; i<img.length ; i++ ){
   img[i].onload = function(){
    var width = this.width;
    var height = this.height;
    if ( width > height ) {
     this.classList.add('height');
    } else if ( width < height ) {
     this.classList.add('width');
    } else {
     this.style.width = '100%';
     this.style.height = '100%';
    }
   }
  }
 }
</script>

图片防止拉伸处理比较简单,但是在实际项目中需要得到足够的重视,一个web页面成也图片,败也图片,拉伸了图片就等着设计师的磨叽吧,哈哈哈哈...

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
jQuery 翻牌或百叶窗效果(内容三秒自动切换)
Jun 14 Javascript
Javascript获取HTML静态页面参数传递值示例
Aug 18 Javascript
jQuery聚合函数实例
May 21 Javascript
轻松学习jQuery插件EasyUI EasyUI创建CRUD应用
Nov 30 Javascript
jQuery UI库中dialog对话框功能使用全解析
Apr 23 Javascript
AngularJs实现分页功能不带省略号的代码
May 30 Javascript
jquery实现垂直和水平菜单导航栏
Aug 27 Javascript
jQuery实现菜单栏导航效果
Aug 15 jQuery
VUE+Element环境搭建与安装的方法步骤
Jan 24 Javascript
详解Vuex下Store的模块化拆分实践
Jul 31 Javascript
通过js示例讲解时间复杂度与空间复杂度
Aug 06 Javascript
基于jQuery实现挂号平台首页源码
Jan 06 jQuery
Vue工程模板文件 webpack打包配置方法
Dec 26 #Javascript
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
Dec 26 #Javascript
Webpack实战加载SVG的方法
Dec 26 #Javascript
vue学习教程之带你一步步详细解析vue-cli
Dec 26 #Javascript
基于vue-cli配置lib-flexible + rem实现移动端自适应
Dec 26 #Javascript
基于 flexible 的 Vue 组件:Toast -- 显示框效果
Dec 26 #Javascript
细说webpack源码之compile流程-rules参数处理技巧(2)
Dec 26 #Javascript
You might like
如何把PHP转成EXE文件
2006/10/09 PHP
淘宝ip地址查询类分享(利用淘宝ip库)
2014/01/07 PHP
php+ajax实现异步上传文件或图片功能
2017/07/18 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
2018/12/07 PHP
js png图片(有含有透明)在IE6中为什么不透明了
2010/02/07 Javascript
自写的jQuery异步加载数据添加事件
2014/05/15 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
2015/06/05 Javascript
浅谈javascript 函数表达式和函数声明的区别
2016/01/05 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
原生JS实现网络彩票投注效果
2016/09/25 Javascript
AngularJS指令与指令之间的交互功能示例
2016/12/14 Javascript
Json按某个键的值进行排序
2016/12/22 Javascript
Bootstrap CSS使用方法
2016/12/23 Javascript
vue组件如何被其他项目引用
2017/04/13 Javascript
一个简易时钟效果js实现代码
2020/03/25 Javascript
浅谈Vue.use的使用
2018/08/29 Javascript
如何运行Python程序的方法
2013/04/21 Python
Python3.x对JSON的一些操作示例
2017/09/01 Python
PyQt5每天必学之组合框
2018/04/20 Python
Sanic框架基于类的视图用法示例
2018/07/18 Python
Python调用C++,通过Pybind11制作Python接口
2018/10/16 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
2019/04/15 Python
利用Python实现Shp格式向GeoJSON的转换方法
2019/07/09 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
在django中自定义字段Field详解
2019/12/03 Python
pandas数据处理之绘图的实现
2020/06/15 Python
一套Java笔试题
2016/08/20 面试题
IMPORT的选项IGNORE有什么作用?缺省是什么设置?
2015/09/17 面试题
幼儿园大班家长评语
2014/04/17 职场文书
副护士长竞聘演讲稿
2014/04/30 职场文书
青年志愿者活动方案
2014/08/17 职场文书
市场营销计划书范文
2015/01/16 职场文书
比较node.js和Deno
2021/04/27 Javascript
Python读取和写入Excel数据
2022/04/20 Python