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 相关文章推荐
游戏人文件夹程序 ver 4.03
Jul 14 Javascript
jquery 插件学习(二)
Aug 06 Javascript
如何阻止复制剪切和粘贴事件为了表单内容的安全
May 23 Javascript
可编辑下拉框的2种实现方式
Jun 13 Javascript
推荐10 个很棒的 jQuery 特效代码
Oct 04 Javascript
详解js私有作用域中创建特权方法
Jan 25 Javascript
js 获取范围内的随机数实例代码
Aug 02 Javascript
使用Fullpage插件快速开发整屏翻页的页面
Sep 13 Javascript
对于防止按钮重复点击的尝试详解
Apr 22 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
Sep 15 jQuery
Node.js API详解之 zlib模块用法分析
May 19 Javascript
js实现弹幕飞机效果
Aug 27 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 内存缓存加速功能memcached安装与用法
2009/09/03 PHP
php+mysql数据库查询实例
2015/01/21 PHP
yii2利用自带UploadedFile实现上传图片的示例
2017/02/16 PHP
js 创建快捷方式的代码(fso)
2010/11/19 Javascript
jquery选择器-根据多个属性选择示例代码
2013/10/21 Javascript
js常用数组操作方法简明总结
2014/06/20 Javascript
jQuery实现渐变弹出层和弹出菜单的方法
2015/02/20 Javascript
jquery.map()方法的使用详解
2015/07/09 Javascript
AngularJs实现ng1.3+表单验证
2015/12/10 Javascript
JS 实现倒计时数字时钟效果【附实例代码】
2016/03/30 Javascript
bootstrap table配置参数例子
2017/01/05 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
vue动态改变背景图片demo分享
2018/09/13 Javascript
封装微信小程序http拦截器过程解析
2019/08/13 Javascript
swiper4实现移动端导航切换
2020/10/16 Javascript
Angular进行简单单元测试的实现方法实例
2020/08/16 Javascript
django之session与分页(实例讲解)
2017/11/13 Python
使用NumPy和pandas对CSV文件进行写操作的实例
2018/06/14 Python
python实现文本界面网络聊天室
2018/12/12 Python
解决django服务器重启端口被占用的问题
2019/07/26 Python
python输出带颜色字体实例方法
2019/09/01 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
2020/09/03 Python
python 利用Pyinstaller打包Web项目
2020/10/23 Python
Amara美国站:英国高端家居礼品网站,世界各地的奢侈家具品牌
2017/07/26 全球购物
Fossil美国官网:化石手表、手袋、首饰及配饰
2019/02/17 全球购物
介绍一下JNDI的基本概念
2013/07/26 面试题
高一政治教学反思
2014/01/28 职场文书
《木笛》教学反思
2014/03/01 职场文书
2014年外联部工作总结
2014/11/17 职场文书
天下第一关导游词
2015/02/06 职场文书
辞职书格式样本
2015/02/26 职场文书
岗位聘任报告
2015/03/02 职场文书
AI:如何训练机器学习的模型
2021/04/16 Python