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代码
Aug 25 Javascript
jQuery处理xml格式的返回数据(实例解析)
Nov 28 Javascript
jQuery内容过滤选择器用法分析
Feb 10 Javascript
微信小程序 Toast自定义实例详解
Jan 20 Javascript
基于JavaScript实现淘宝商品广告效果
Aug 10 Javascript
js截取字符串功能的实现方法
Sep 27 Javascript
微信小程序模版渲染详解
Jan 26 Javascript
ES6与CommonJS中的模块处理的区别
Jun 13 Javascript
深入浅析nuxt.js基于ssh的vue通用框架
May 21 Javascript
Vue中遍历数组的新方法实例详解
Jul 21 Javascript
layui实现显示数据表格、搜索和修改功能示例
Jun 03 Javascript
浅谈 JavaScript 沙箱Sandbox
Nov 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
如何批量替换相对地址为绝对地址(利用bat批处理实现)
2013/05/27 PHP
深入PHP中慎用双等于(==)的详解
2013/06/06 PHP
在Yii框架中使用PHP模板引擎Twig的例子
2014/06/13 PHP
php第一次无法获取cookie问题处理
2014/12/15 PHP
php操作(删除,提取,增加)zip文件方法详解
2015/03/12 PHP
php自动更新版权信息显示的方法
2015/06/19 PHP
使用PHP反射机制来构造&quot;CREATE TABLE&quot;的sql语句
2019/03/21 PHP
Laravel关系模型指定条件查询方法
2019/10/10 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
2019/12/02 PHP
Centos7.7 64位利用本地完整安装包安装lnmp/lamp套件教程
2021/03/09 Servers
JS 的应用开发初探(mootools)
2009/12/19 Javascript
node.js中的events.emitter.removeListener方法使用说明
2014/12/10 Javascript
jquery显示loading图片直到网页加载完成的方法
2015/06/25 Javascript
jquery.mousewheel实现整屏翻屏效果
2015/08/30 Javascript
获取阴历(农历)和当前日期的js代码
2016/02/15 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
2016/06/03 Javascript
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
通过jquery.cookie.js实现记住用户名、密码登录功能
2018/06/20 jQuery
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
maptalks+three.js+vue webpack实现二维地图上贴三维模型操作
2020/08/10 Javascript
对python cv2批量灰度图片并保存的实例讲解
2018/11/09 Python
使用python socket分发大文件的实现方法
2019/07/08 Python
python3.7将代码打包成exe程序并添加图标的方法
2019/10/11 Python
套娃式文件夹如何通过Python批量处理
2020/08/23 Python
如何基于Python实现word文档重新排版
2020/09/29 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
《菜园里》教学反思
2014/04/17 职场文书
计算机系统管理员求职信
2014/06/20 职场文书
员工三分钟演讲稿
2014/08/19 职场文书
2015年保险业务员工作总结
2015/05/27 职场文书
父母教会我观后感
2015/06/17 职场文书
致短跑运动员加油稿
2015/07/21 职场文书
忠诚教育学习心得体会
2016/01/23 职场文书
2019脱贫攻坚工作总结报告范本!
2019/08/06 职场文书