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 相关文章推荐
html 锁定页面(js遮罩层弹出div效果)
Oct 27 Javascript
Ext对基本类型的扩展 ext,extjs,format
Dec 25 Javascript
基于jQuery的简单九宫格实现代码
Aug 09 Javascript
AJAX跨域请求json数据的实现方法
Nov 11 Javascript
js 与 php 通过json数据进行通讯示例
Mar 26 Javascript
Javascript MVC框架Backbone.js详解
Sep 18 Javascript
JS实现动态移动层及拖动浮层关闭的方法
Apr 30 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
Aug 25 Javascript
jQuery实现输入框的放大和缩小功能示例
Jul 21 jQuery
解决layui调用自定义方法提示未定义的问题
Sep 14 Javascript
layui富文本编辑器前端无法取值的解决方法
Sep 18 Javascript
javascript 数组精简技巧小结
Feb 26 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
深入phpMyAdmin的安装与配置的详细步骤
2013/05/07 PHP
PHP中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
php实现用于验证所有类型的信用卡类
2015/03/24 PHP
PHP中list()函数用法实例简析
2016/01/08 PHP
php 解决扫描二维码下载跳转问题
2017/01/13 PHP
lib.utf.js
2007/08/21 Javascript
JQuery 插件模板 制作jquery插件的朋友可以参考下
2010/03/17 Javascript
ext jquery 简单比较
2010/04/07 Javascript
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
extjs实现选择多表自定义查询功能 前台部分(ext源码)
2011/12/20 Javascript
jQuery ajax调用WCF服务实例
2014/07/16 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
javascript 中__proto__和prototype详解
2014/11/25 Javascript
总结Node.js中的一些错误类型
2016/08/15 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
[01:52]PWL S2开团时刻第四期——DOTA2成语故事
2020/12/03 DOTA
Python for Informatics 第11章之正则表达式(四)
2016/04/21 Python
Python编程实现数学运算求一元二次方程的实根算法示例
2017/04/02 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
2019/04/03 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
2019/09/18 Python
python+adb命令实现自动刷视频脚本案例
2020/04/23 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
Python设计密码强度校验程序
2020/07/30 Python
美国手工艺品市场的领导者:Annie’s
2019/04/04 全球购物
巴西儿童时尚购物网站:Dinda
2019/08/14 全球购物
美国在线面料商店:Fashion Fabrics Club
2020/01/31 全球购物
接口可以包含哪些成员
2012/09/30 面试题
销售高级职员求职信
2013/10/29 职场文书
舞蹈专业大学生职业规划范文
2014/03/12 职场文书
2014党员自我评议表范文
2014/09/20 职场文书
2014年店长工作总结
2014/11/17 职场文书
政审证明材料
2015/06/19 职场文书
基于Python实现一个春节倒计时脚本
2022/01/22 Python
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js