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实现简单随机抽奖的方法
Jan 27 Javascript
IE下支持文本框和密码框placeholder效果的JQuery插件分享
Jan 31 Javascript
JavaScript+html5 canvas制作的圆中圆效果实例
Jan 27 Javascript
完善的jquery处理机制
Feb 21 Javascript
基于jquery实现智能表单验证操作
May 09 Javascript
特殊日期提示功能的实现方法
Jun 16 Javascript
vue.js将时间戳转化为日期格式的实现代码
Jun 05 Javascript
vue2.0 下拉框默认标题设置方法
Aug 22 Javascript
vue表单自定义校验规则介绍
Aug 28 Javascript
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
Jan 15 Javascript
小程序hover-class点击态效果实现
Feb 26 Javascript
vue打包npm run build时候界面报错的解决
Aug 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
linux下编译安装memcached服务
2014/08/03 PHP
从性能方面考虑PHP下载远程文件的3种方法
2015/12/29 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
2019/05/06 PHP
js编码、解码函数介绍及其使用示例
2013/09/05 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
js实现网页随机切换背景图片的方法
2014/11/01 Javascript
jquery中EasyUI使用技巧小结
2015/02/10 Javascript
javascript结合canvas实现图片旋转效果
2015/05/03 Javascript
AngularJS封装指令方法详解
2016/12/12 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
详解如何构建一个Angular6的第三方npm包
2018/09/07 Javascript
Vue 修改网站图标的方法
2020/12/31 Vue.js
python结合API实现即时天气信息
2016/01/19 Python
简单谈谈Python中的反转字符串问题
2016/10/24 Python
python实现判断一个字符串是否是合法IP地址的示例
2018/06/04 Python
Python socket套接字实现C/S模式远程命令执行功能案例
2018/07/06 Python
python3 自动识别usb连接状态,即对usb重连的判断方法
2019/07/03 Python
Django项目基础配置和基本使用过程解析
2019/11/25 Python
python入门之基础语法学习笔记
2020/02/08 Python
django实现将修改好的新模型写入数据库
2020/03/31 Python
Python pymysql模块安装并操作过程解析
2020/10/13 Python
html5自带表单验证体验优化及提示气泡修改功能
2017/09/12 HTML / CSS
享誉全球的多元化时尚精品购物平台:Farfetch发发奇(支持中文)
2017/08/08 全球购物
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
回门宴新郎答谢词
2014/01/12 职场文书
水果超市创业计划书
2014/01/27 职场文书
工会主席岗位责任制
2014/02/11 职场文书
老公保证书范文
2014/04/29 职场文书
工作汇报开头与结尾怎么写
2014/11/08 职场文书
2016年社区文体活动总结
2016/04/06 职场文书
vue前端工程的搭建
2021/03/31 Vue.js
代码解析React中setState同步和异步问题
2021/06/03 Javascript
instantclient客户端 连接oracle数据库
2022/04/26 Oracle
win11怎么消除图标小盾牌?win11消除图标小盾牌解决方法
2022/08/05 数码科技