实现图片的最小边展示,我们可以直接用background-size:cover;来解决,但是,background是毕竟不是img,如果想宽度固定,高度自适应还是比较难的,而直接用img,那么只能使用object-fit:cover;object-position:center;的方法,但是这种方法兼容性较差。

所以,这里我们探讨一些其他的方法。

我们可以让div套住img,通过div限制大小,通过获取img的尺寸自适应div。

思路确定

如下图所示,左侧空白正方形为一个box,右侧矩形为图片。

  • 步骤一:新建一个box和一个图片;
  • 步骤二:可将图片最小边缩放至与box同样大小,然后将图片大小同比例缩放;
  • 步骤三:将图片移动至box中间位置。

问题分解

问题1:根据宽高比例不同,需要进行不同的缩放,如何得到图片的宽与高呢?

答:图片在不加载之前,是无法获取图片具体的尺寸的,那么就让图片先加载出来,先获得图片的尺寸,再根据图片尺寸类型进行展示。

注意:要把imgLoader挂载src的地方放在onload以后,以防止有缓存的情况下onload事件不执行。

问题2:如何计算图片展示的起点及图片应该展示的宽度?

答:在此类情况下,可以直接定位到中间部分。

问题3:如果图片的宽高相同且box为宽大于高该怎么展示?

答:当box的宽大于高,此时不可将图片的高度设置为与box相同,否则展示的样式会与最大边展示相同,如下图所示。

因此,此种情况,图片的高度应自适应,宽度与box同宽,即该类情况与图片的宽度小于图片的高度相同。

针对特殊情况的代码

同样的道理,如果以最大边作为展示的依据,则把两个规则调转一下即可,并增加一个选项。

这里按照background-size的方法,增加style参数,如果style='cover',表示按最小边展示,如果style='cover',表示按最大边展示。

问题4:如果按照最小边展示时,同比例压缩后的图片的宽小于box的宽怎么办?

答:有一种特殊情况,图片的宽大于高,但是同比例压缩后,图片的宽度仍然小于box的宽度,如下图所示。

因此,这里我们不应该使用图片的宽与高大小的差别来判断如何展示,而应该通过对图片与box的宽高比进行展示的判断。

广告网页设计与制作
作者:朱小杰
京东

img宽>img高

img宽>img高

img宽=img高

上面的一些图片,左侧是用方法一做到的效果,而右侧是用background-size:cover/contain达到的效果,可以看出,完全一致。

优化尺寸获取方式

但是上面的方法本质上是在加载过一次图片后,获取了宽高再进行调整。

虽然通常情况下,浏览器的资源缓存机制会使图像会只加载一次并在整个会话中使用,但是new Image()这种方法通常用作预加载,在此处我们不需要进行预加载,因此我们可以做这样的修改。

上面这种方式通过直接加载图片,然后获取图片的尺寸,再根据尺寸动态的进行修改图片的 展示。同样,也可以创建一次实例然后利用canvas加载图像的方法来展示。

在写canvas时请注意,canvas的宽高请使用js来调整,而不要修改css。

简单理解,canvas原理就是一个画画的原理,canvas这个标签是画板,而在canvas中展示的东西是在画布上的。在渲染canvas时,初始化画板为300*150,同样画布也是300*150。当通过改变canvas的style进行宽高的修改时,其实仅仅是修改画板的宽高,而当画板与画纸尺寸不统一时,画纸内的图像就会趋向于与画板的尺寸相同,必然会导致图像的拉伸或者压缩。

因此,在修改尺寸的时候,要同步修改画板与画纸,这里可以直接使用用HTML 5 canvas 的api动态控制。

总结

以上三种方法,都可以得到与background-size:cover;background-position:center;和object-fit:cover;object-position:center;相同的效果。各位也可以根据自己的需要调整max-height或transform等属性。

cesium加载entity图片缩放_教你使用最简单粗暴的js方法实现图片最小边展示相关推荐

  1. cesium加载entity图片缩放_Cesium中级教程4 – 空间数据可视化(二)

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ Viewer中的Entity功能 让我们看看Viewer为操作e ...

  2. cesium加载 gltf模型

    cesium加载 gltf模型 首先自己配置一个iis环境 :http://www.xitongcheng.com/jiaocheng/win10_article_60912.html,其他环境 比如 ...

  3. cesium 加载科技感

    cesium 加载模型上边的呼吸感 // 设置透明度var alp = 1;var num = 0; 在model里边添加这个color参数 color:new Cesium.CallbackProp ...

  4. cesium加载批量模型

    cesium加载批量模型 class CreateModel {constructor() { }// 添加单条数据addEntity(item) {// 删除实体// viewer.entities ...

  5. CESIUM加载glb的模型

    CESIUM加载glb的模型 1.首先有一个glb格式的模型 // 加载gltf的模型 //url模型路径 可以是.glb或者gltf等,height距地高度0为贴地 function createM ...

  6. Cesium加载建筑物模型(shp转Geojson\3Dtiles)

    本文主要介绍cesium加载Geojson和3dtile格式的建筑物模型文件,除此之外还介绍了Cesium工具栏的屏蔽方法.天地图的加载.地球初始状态设置等几个部分的内容,其中又不乏参照.优化诸如:  ...

  7. cesium加载动图方案三:通过apng-js库实现

    1.项目场景 实际开发中我们经常会有动图加载的需求,而Cesium不支持纹理贴动图,怎么样基于Cesium实现动图的加载,值得我们研究一波.cesium加载gif格式的动图有些场景能够满足我们的需求, ...

  8. Cesium加载离线地图

    Cesium加载离线地图 一.下载地图并导出为tms格式 二.安装nginx并配置静态文件服务路径 一.下载地图并导出为tms格式 利用地图下载器下载相关范围的地图,然后导出为tms格式的地图切片 二 ...

  9. cesium加载arcgis切片

    cesium 加载arcmap切片 jpg // z 是缩放级别 x是从左到右 y是从上到下 var imageryUrl = '/images/{z}/{x}/{y}.jpg';//影像数据var ...

最新文章

  1. 小猿圈Linux学习-Linux种搜索的命令
  2. 鞋带的超炫系法-真是门艺术[转载]
  3. 笔记︱决策树族——梯度提升树(GBDT)
  4. html如何转换成电子表,如何轻松将电子表格转换为HTML [快速提示] | MOS86
  5. Struts2配置国际化文件
  6. Superset集成到iframe 跨域 无需账号登录
  7. [2018.07.31 T1] 第一题
  8. wireshark抓取分析UDP数据包
  9. RNA-seq——五、根据差异基因画火山图、在火山图上标记基因名
  10. matlab opnet,opnet环境变量和matlab联调心得
  11. unity中世界坐标与局部坐标
  12. 今天小暑是什么时间_小暑时间是什么?代表什么?
  13. Python+Appium实现京东双十一自动领金币
  14. Aspect获取目标方法中带特定注解的参数值
  15. 太恐怖了 两天搞定一个项目 Java Web MVC 网络商城教程+源代码
  16. 海伦公式求三角形垂线长度
  17. BEAM钱包地址获取教程
  18. 【python制作小游戏】大鼻子马里奥等你来挑战,还原度超高哦~
  19. c语言通过结构体实现班车预约系统
  20. android 任务,应用任务(app.task) - 0.2.3 - 应用 - 酷安

热门文章

  1. hpgs2wnd.exe
  2. 《剑指offter》
  3. 深入理解 LWUIT 框架的 MVC
  4. oracle服务器配置端口,服务端配置一个多端口号(如1521/1526)监听器
  5. Android fragment中广告图片轮播效果的实现(附图 )
  6. 春节假期和幺儿一起玩xbox360的体感游戏
  7. 拼多多上架工具有哪些,拼多多产品上架流程详解
  8. 注意收藏 !2022年下半年软考时间都在这
  9. oracle dba培训教程 第九章 创建数据库
  10. 二等水准测量记录数据_二等水准测量外业数据整理(往返测)