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 相关文章推荐
fromCharCode和charCodeAt 方法
Dec 27 Javascript
超级兔子让浮动层消失的前因后果
Mar 09 Javascript
JavaScript获取GridView选择的行内容
Apr 14 Javascript
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
Sep 20 Javascript
javascript 另一种图片滚动切换效果思路
Apr 20 Javascript
JavaScript关闭当前页面(窗口)不带任何提示
Mar 26 Javascript
jQuery实现判断滚动条到底部
Jun 23 Javascript
asp.net中oracle 存储过程(图文)
Aug 12 Javascript
js数组去重的5种算法实现
Nov 04 Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
Dec 03 Javascript
微信小程序 flex实现导航实例详解
Apr 26 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【圆形情况】
Dec 13 Javascript
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 array_multisort()函数的使用札记
2011/07/03 PHP
一个PHP的QRcode类与大家分享
2011/11/13 PHP
PHP URL路由类实例
2013/11/12 PHP
php文件读取方法实例分析
2015/06/20 PHP
ThinkPHP发送邮件示例代码
2016/10/08 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
2016/10/29 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
PHP如何通过date() 函数格式化显示时间
2020/11/13 PHP
prototype 的说明 js类
2006/09/07 Javascript
Mootools 1.2教程 选项卡效果(Tabs)
2009/09/15 Javascript
js各种验证文本框输入格式(正则表达式)
2010/10/22 Javascript
一行代码告别document.getElementById
2012/06/01 Javascript
JavaScript中几种排序算法的简单实现
2015/07/29 Javascript
JavaScript里 ==与===区别详解
2016/08/16 Javascript
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
Bootstrap弹出框modal上层的输入框不能获得焦点问题的解决方法
2016/12/13 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
Vue框架里使用Swiper的方法示例
2018/09/20 Javascript
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
JS开发 富文本编辑器TinyMCE详解
2019/07/19 Javascript
Vue使用mixin分发组件的可复用功能
2019/09/01 Javascript
微信小程序加载机制及运行机制图解
2019/11/27 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
JavaScript面试中常考的字符串操作方法大全(包含ES6)
2020/05/10 Javascript
python之文件的读写和文件目录以及文件夹的操作实现代码
2016/08/28 Python
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
Python爬虫使用脚本登录Github并查看信息
2018/07/16 Python
在Python中分别打印列表中的每一个元素方法
2018/11/07 Python
Python函数中参数是传递值还是引用详解
2019/07/02 Python
详解如何用python实现一个简单下载器的服务端和客户端
2019/10/28 Python
Python多进程multiprocessing、进程池用法实例分析
2020/03/24 Python
详解CSS3的perspective属性设置3D变换距离的方法
2016/05/23 HTML / CSS
数学系毕业生的自我评价
2014/01/10 职场文书
学习两会精神心得范文
2014/03/17 职场文书
党员干部反四风对照检查材料思想汇报
2014/09/14 职场文书
西湖英语导游词
2015/02/06 职场文书