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 在指定数组中随机取出N个不重复的数据
Jun 10 Javascript
node.js使用require()函数加载模块
Nov 26 Javascript
JavaScript正则表达式之multiline属性的应用
Jun 16 Javascript
理解和运用JavaScript的闭包机制
Aug 13 Javascript
Javascript之面向对象--方法
Dec 02 Javascript
微信小程序页面传值实例分析
Apr 19 Javascript
Ionic2调用本地SQlite实例
Apr 22 Javascript
vue params、query传参使用详解
Sep 12 Javascript
JS获取当前时间的实例代码(昨天、今天、明天)
Nov 13 Javascript
PM2自动部署代码步骤流程总结
Dec 10 Javascript
js类的继承定义与用法分析
Jun 21 Javascript
修改Vue打包后的默认文件名操作
Aug 12 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中break及continue两个流程控制指令区别分析
2011/04/18 PHP
php上传图片并压缩的实现方法
2015/12/22 PHP
PHP文件缓存smarty模板应用实例分析
2016/02/26 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
[原创]来自ImageSee官方 JavaScript图片浏览器
2008/01/16 Javascript
JavaScript与DropDownList 区别分析
2010/01/01 Javascript
jQuery 表格插件整理
2010/04/27 Javascript
ExtJS 刷新后如何默认选中刷新前最后一次选中的节点
2014/04/03 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
2014/04/16 Javascript
js使用for循环查询数组中是否存在某个值
2014/08/12 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
在JavaScript的AngularJS库中进行单元测试的方法
2015/06/23 Javascript
JS导出PDF插件的方法(支持中文、图片使用路径)
2016/07/12 Javascript
JS实现图文并茂的tab选项卡效果示例【附demo源码下载】
2016/09/21 Javascript
自己封装的一个简单的倒计时功能实例
2016/11/23 Javascript
jQuery插件之validation插件
2017/03/29 jQuery
React进阶学习之组件的解耦之道
2017/08/07 Javascript
基于Node.js实现压缩和解压缩的方法
2018/02/13 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
redux中间件之redux-thunk的具体使用
2018/04/17 Javascript
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
JS函数节流和防抖之间的区分和实现详解
2019/01/11 Javascript
简单了解Javscript中兄弟ifream的方法调用
2019/06/17 Javascript
[02:05]2014DOTA2国际邀请赛 BBC外卡赛赛后总结
2014/07/09 DOTA
python多重继承新算法C3介绍
2014/09/28 Python
Python通过matplotlib绘制动画简单实例
2017/12/13 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
2020/06/02 Python
《云雀的心愿》教学反思
2014/02/25 职场文书
培训班主持词
2014/03/28 职场文书
预防煤气中毒方案
2014/06/16 职场文书
关于保护环境的建议书
2014/08/26 职场文书
年终工作总结范文2014
2014/11/27 职场文书
2019大学竞选班长发言稿
2019/06/27 职场文书
CSS3 Tab动画实例之背景切换动态效果
2021/08/23 HTML / CSS
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript