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脚本学习 比较实用的基础
Sep 07 Javascript
理解Javascript_07_理解instanceof实现原理
Oct 15 Javascript
javaScript复制功能调用实现方案
Dec 13 Javascript
JavaScript实现网页图片等比例缩放实现代码及调用方式
Feb 25 Javascript
JS中Iframe之间传值的方法
Mar 11 Javascript
快速解决jQuery与其他库冲突的方法介绍
Jan 02 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
Aug 25 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
Jan 04 Javascript
关于axios返回空对象的问题解决
Apr 04 Javascript
vue keep-alive请求数据的方法示例
May 16 Javascript
layui的数据表格+springmvc实现搜索功能的例子
Sep 28 Javascript
vue设置一开始进入的页面教程
Oct 28 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判断数组中是否存在指定键(key)的方法
2015/03/17 PHP
PHP GD库相关图像生成和处理函数小结
2016/09/30 PHP
完美解决thinkphp唯一索引重复时出错的问题
2017/03/31 PHP
Prototype使用指南之selector.js说明
2008/10/26 Javascript
ASP.NET中使用后端代码注册脚本 生成JQUERY-EASYUI的界面错位的解决方法
2010/06/12 Javascript
jQuery EasyUI API 中文文档 - ValidateBox验证框
2011/10/06 Javascript
jQuery使用post方法提交数据实例
2015/03/25 Javascript
JS实现定时自动关闭DIV层提示框的方法
2015/05/11 Javascript
JS中创建函数的三种方式及区别
2016/03/13 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
简单模拟node.js中require的加载机制
2016/10/27 Javascript
JS多物体实现缓冲运动效果示例
2016/12/20 Javascript
js实现前端分页页码管理
2017/01/06 Javascript
JavaScript实现弹出广告功能
2017/03/30 Javascript
基于vue-ssr服务端渲染入门详解
2018/01/08 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
Vue 页面跳转不用router-link的实现代码
2018/04/12 Javascript
JS实现的视频弹幕效果示例
2018/08/17 Javascript
vue动态设置img的src路径实例
2018/09/18 Javascript
jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】
2019/06/06 jQuery
Vue-cli3.X使用px2 rem遇到的问题及解决方法
2019/08/08 Javascript
javascript操作向表格中动态加载数据
2020/08/27 Javascript
vue中jsonp插件的使用方法示例
2020/09/10 Javascript
Python使用Matplotlib实现雨点图动画效果的方法
2017/12/23 Python
Python logging设置和logger解析
2019/08/28 Python
关于tf.reverse_sequence()简述
2020/01/20 Python
Python类的绑定方法和非绑定方法实例解析
2020/03/04 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
2020/04/29 Python
Django通过json格式收集主机信息
2020/05/29 Python
北美三大旅游网站之一:Travelocity
2017/08/12 全球购物
高中生期末评语
2014/01/28 职场文书
2014年三八妇女节活动总结
2014/03/01 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
2016年劳模先进事迹材料
2016/02/25 职场文书
详解Node.js如何处理ES6模块
2021/05/15 Javascript
css3属性选择器 “~”(波浪号) “,”(逗号) “+”(加号)和 “>”(大于号)
2022/04/19 HTML / CSS