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选择没有colspan属性的td的代码
Jul 06 Javascript
jquery交替变换颜色的三种方法 实例代码
Nov 19 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
Feb 14 Javascript
JavaScript实现二分查找实例代码
Feb 22 Javascript
Async Validator 异步验证使用说明
Jul 03 Javascript
jQuery实现表格冻结顶栏效果
Aug 20 jQuery
EasyUI实现下拉框多选功能
Nov 07 Javascript
JS实现标签滚动切换效果
Dec 25 Javascript
vue实现动态显示与隐藏底部导航的方法分析
Feb 11 Javascript
webpack4手动搭建Vue开发环境实现todoList项目的方法
May 16 Javascript
vue+iview实现分页及查询功能
Nov 17 Vue.js
JavaScript实现筛选数组
Mar 02 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实现的MySQL数据浏览器
2007/03/11 PHP
php中3des加密代码(完全与.net中的兼容)
2012/08/02 PHP
PHP使用Mysql事务实例解析
2014/09/08 PHP
php 使用array函数实现分页
2015/02/13 PHP
yii2中添加验证码的实现方法
2016/01/09 PHP
php基于dom实现的图书xml格式数据示例
2017/02/03 PHP
PHP经典实用正则表达式小结
2017/05/04 PHP
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
jQuery:节点(插入,复制,替换,删除)操作
2013/03/04 Javascript
批量修改标签css样式以input标签为例
2014/07/31 Javascript
实践中学习AngularJS表单
2016/03/21 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
JavaScript中boolean类型之三种情景实例代码
2016/11/21 Javascript
ES6深入理解之“let”能替代”var“吗?
2017/06/28 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
2017/09/18 jQuery
基于Swiper实现移动端页面图片轮播效果
2017/12/28 Javascript
JS对象属性的检测与获取操作实例分析
2020/03/17 Javascript
JavaScript实现滚动加载更多
2020/12/27 Javascript
[03:55]2014DOTA2国际邀请赛 Fnatic经理采访赢DK在情理之中
2014/07/10 DOTA
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
python目录操作之python遍历文件夹后将结果存储为xml
2014/01/27 Python
Python中类的继承代码实例
2014/10/28 Python
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
2015/03/30 Python
完美解决安装完tensorflow后pip无法使用的问题
2018/06/11 Python
Python基于property实现类的特性操作示例
2018/06/15 Python
示例详解Python3 or Python2 两者之间的差异
2018/08/23 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
2019/08/20 Python
英国顶尖手表珠宝品牌独家授权经销商:HS Johnson
2020/10/28 全球购物
总经理助理岗位职责
2013/11/08 职场文书
家长评语和期望
2014/02/10 职场文书
人力资源管理专业自荐书范文
2014/02/10 职场文书
办理信用卡收入证明范例
2014/09/13 职场文书
民事诉讼代理委托书
2014/10/08 职场文书
群众路线对照检查剖析材料
2014/10/09 职场文书
企业党建工作总结2015
2015/05/26 职场文书
幼儿园小班开学寄语(2016秋季)
2015/12/03 职场文书