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 相关文章推荐
JS控件autocomplete 0.11演示及下载 1月5日已更新
Jan 09 Javascript
在chrome浏览器中,防止input[text]和textarea在聚焦时出现黄色边框的解决方法
May 24 Javascript
cookie在javascript中的使用技巧以及隐私在服务器端的设置
Dec 03 Javascript
IE中document.createElement的iframe无法设置属性name的解决方法
Sep 14 Javascript
jquery实时获取时间的简单实例
Jan 26 Javascript
又一款MVVM组件 构建自己的Vue组件(2)
Mar 13 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
Jul 09 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
Aug 18 Javascript
js根据json数据中的某一个属性来给数据分组的方法
Oct 08 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
May 06 Javascript
JavaScript的垃圾回收机制与内存管理
Aug 06 Javascript
jQuery实现简单轮播图效果
Dec 27 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的朋友 经常问的一些问题。不断更新
2011/08/11 PHP
基于php伪静态的实现详细介绍
2013/04/28 PHP
PHP中list()函数用法实例简析
2016/01/08 PHP
使用JQuery和s3captche实现一个水果名字的验证
2009/08/14 Javascript
JavaScript 判断指定字符串是否为有效数字
2010/05/11 Javascript
jquery each()源代码
2011/02/14 Javascript
JSONP 跨域访问代理API-yahooapis实现代码
2012/12/02 Javascript
JavaScript异步编程Promise模式的6个特性
2014/04/03 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
JS简单编号生成器实现方法(附demo源码下载)
2016/04/05 Javascript
jQuery操作iframe中js函数的方法小结
2016/07/06 Javascript
详解webpack+gulp实现自动构建部署
2017/06/29 Javascript
基于Vuejs的搜索匹配功能实现方法
2018/03/03 Javascript
Express的HTTP重定向到HTTPS的方法
2018/06/06 Javascript
Bootstrap Table 双击、单击行获取该行及全表内容
2018/08/31 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
2018/09/18 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
9102了,你还不会移动端真机调试吗
2019/03/25 Javascript
Python读写Redis数据库操作示例
2014/03/18 Python
Python读取图片属性信息的实现方法
2016/09/11 Python
Python 逐行分割大txt文件的方法
2017/10/10 Python
Python异常处理操作实例详解
2018/05/10 Python
Python多线程原理与用法详解
2018/08/20 Python
Python实现繁?转为简体的方法示例
2018/12/18 Python
python实现两个一维列表合并成一个二维列表
2019/12/02 Python
Python基于pygame实现单机版五子棋对战
2019/12/26 Python
使用Django清空数据库并重新生成
2020/04/03 Python
各大浏览器 CSS3 和 HTML5 兼容速查表 图文
2010/04/01 HTML / CSS
解决canvas转base64/jpeg时透明区域变成黑色背景的方法
2016/10/23 HTML / CSS
MyBag中文网:英国著名的时尚包袋电商零售网站
2020/07/31 全球购物
学校花圃的标语
2014/06/18 职场文书
村长党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2014班子成员自我剖析材料思想汇报
2014/10/01 职场文书
怎么写工作检讨书
2014/11/16 职场文书
九九重阳节致辞
2015/07/31 职场文书
会计手工模拟做账心得体会
2016/01/22 职场文书