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 相关文章推荐
网页设计常用的一些技巧
Dec 22 Javascript
Firefox和IE浏览器兼容JS脚本写法小结
Jul 07 Javascript
javascript multibox 全选
Mar 22 Javascript
jquery创建div 实现代码
Apr 27 Javascript
DIV外区域Click后关闭DIV的实现代码
Dec 21 Javascript
JS Date函数整理方便使用
Oct 23 Javascript
解决React Native端口号修改的方法
Jul 28 Javascript
使用vuex的state状态对象的5种方式
Apr 19 Javascript
JS基于对象的链表实现与使用方法示例
Jan 31 Javascript
微信小程序如何实现五星评价功能
Oct 15 Javascript
JavaScript隐式类型转换代码实例
May 29 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
Dec 14 Vue.js
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
Laravel实现短信注册的示例代码
2018/05/29 PHP
PHP钩子实现方法解析
2019/05/21 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
2019/06/17 PHP
Aster vs Newbee BO3 第二场2.18
2021/03/10 DOTA
FileUpload 控件 禁止手动输入或粘贴的实现代码
2010/04/07 Javascript
javascript复制对象使用说明
2011/06/28 Javascript
$.getJSON在IE下失效的原因分析及解决方法
2013/06/16 Javascript
jQuery实现的给图片点赞+1动画效果(附在线演示及demo源码下载)
2015/12/31 Javascript
JSON 对象未定义错误的解决方法
2016/09/29 Javascript
js阻止冒泡和默认事件(默认行为)详解
2016/10/20 Javascript
webpack将js打包后的map文件详解
2018/02/22 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
小程序api实现promise封装过程解析
2019/11/21 Javascript
Python中使用PDB库调试程序
2015/04/05 Python
介绍Python中的__future__模块
2015/04/27 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
如何使用Python进行OCR识别图片中的文字
2019/04/01 Python
python 批量解压压缩文件的实例代码
2019/06/27 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
Python列表操作方法详解
2020/02/09 Python
PythonPC客户端自动化实现原理(pywinauto)
2020/05/28 Python
Python实现将元组中的元素作为参数传入函数的操作
2020/06/05 Python
Python如何实现自带HTTP文件传输服务
2020/07/08 Python
Python实现爬取网页中动态加载的数据
2020/08/17 Python
PyQt实现计数器的方法示例
2021/01/18 Python
物流专业大学生的自我鉴定
2013/11/13 职场文书
新闻专业个人求职信
2013/12/19 职场文书
小学新学期教师寄语
2014/01/18 职场文书
茶叶店创业计划书范文
2014/01/19 职场文书
《美丽的小兴安岭》教学反思
2014/02/26 职场文书
超市理货员岗位职责
2014/07/04 职场文书
2015年初一班主任工作总结
2015/05/13 职场文书
先进基层党组织主要事迹材料
2015/11/03 职场文书
Python 中的Sympy详细使用
2021/08/07 Python
Golang map映射的用法
2022/04/22 Golang