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 操作select相关方法函数
Dec 06 Javascript
JS+CSS设置img在DIV中只显示Img垂直居中的部分
Oct 24 Javascript
JavaScript实现大数的运算
Nov 24 Javascript
js 判断所选时间(或者当前时间)是否在某一时间段的实现代码
Sep 05 Javascript
jQuery实现ctrl+enter(回车)提交表单
Oct 19 Javascript
jQuery实现分章节锚点“回到顶部”动画特效代码
Oct 23 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
Oct 27 Javascript
jQuery联动日历的实例解析
Dec 02 Javascript
微信小程序之页面拦截器的示例代码
Sep 07 Javascript
seajs中模块依赖的加载处理实例分析
Oct 10 Javascript
Vue OpenLayer测距功能的实现
Apr 20 Vue.js
Vue组件化(ref,props, mixin,.插件)详解
May 15 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
高亮度显示php源代码
2006/10/09 PHP
php htmlentities和htmlspecialchars 的区别
2008/08/18 PHP
php获取地址栏信息的代码
2008/10/08 PHP
深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表
2013/06/06 PHP
Confirmer JQuery确认对话框组件
2010/06/09 Javascript
浅谈javascript的数据类型检测
2010/07/10 Javascript
不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象
2013/01/11 Javascript
Javascript中判断变量是数组还是对象(array还是object)
2013/08/14 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
JS实现的自定义网页拖动类
2015/11/06 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
2016/05/05 Javascript
JS获取复选框的值,并传递到后台的实现方法
2016/05/30 Javascript
JavaScript框架Angular和React深度对比
2017/11/20 Javascript
JQuery实现table中tr上移下移的示例(超简单)
2018/01/08 jQuery
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
node.js到底要不要加分号浅析
2018/07/11 Javascript
vue 中滚动条始终定位在底部的方法
2018/09/03 Javascript
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
2018/10/23 Javascript
jQuery+vue.js实现的多选下拉列表功能示例
2019/01/15 jQuery
浅谈JS的原型和继承
2019/05/08 Javascript
JS正则表达式封装与使用操作示例
2019/05/15 Javascript
Vue通过WebSocket建立长连接的实现代码
2019/11/05 Javascript
bootstrap实现tab选项卡切换
2020/08/09 Javascript
打包发布Python模块的方法详解
2016/09/18 Python
python贪婪匹配以及多行匹配的实例讲解
2018/04/19 Python
在pytorch中动态调整优化器的学习率方式
2020/06/24 Python
Keras中的两种模型:Sequential和Model用法
2020/06/27 Python
总经理办公室主任岗位职责
2013/11/12 职场文书
学生操行评语大全
2014/04/24 职场文书
交通志愿者活动总结
2014/06/27 职场文书
药店促销活动总结
2014/07/10 职场文书
再婚婚前财产协议书范本
2014/10/19 职场文书
2015年人事科工作总结
2015/04/28 职场文书
关于元旦的广播稿2016
2015/12/17 职场文书
Java生成读取条形码和二维码的简单示例
2021/07/09 Java/Android
i7 6700处理器相当于i5几代
2022/04/19 数码科技