问答

给body添加全屏背景图(backgroung-size:cover),如何给图片上某

作者:admin 2021-04-21 我要评论

有一个需求,需要全屏显示一张区域图,然后给某些区域添加点击事件,想了很久没有想到好的解决办法,暂时是这样应急的(给body设置背景图,backgroung-size:cove...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

有一个需求,需要全屏显示一张区域图,然后给某些区域添加点击事件,想了很久没有想到好的解决办法,暂时是这样应急的(给body设置背景图,backgroung-size:cover,然后根据屏幕定位,这样不同分辨率下定位的点击事件会偏移),哪位高手提示下解决办法,多谢image

###

cover 是按照等比缩放铺满整个区域,只有元素盒子和背景图宽高比例相同时才会完整显示。否则盒子更宽则截去了背景图下边部分,背景适应盒子宽度,更窄则截去背景图右边部分,背景适应盒子高度。
点击事件拿到的是当前屏幕分辨率下的坐标,比如在1080p的网页里,可能点击事件的坐标是 screenX: 276, screenY: 784,但是实际背景图的分辨率是 4500 * 3000。
所以首先需要根据当前屏幕的宽高比例,判断背景图是基于宽还是高等比例缩放。
假设是基于屏幕宽度缩放,则通过屏幕宽度和背景图的宽度,计算出缩放比例。
最后按比例和点击事件中的屏幕坐标,得到在图片中的对应位置。

###

放弃 background-size:cover

图片 放 DIV 里,width 100%, height 100%
所有响应区域 用 子DIV 覆盖,监听 CLICK 事件
用 transform 缩放 最外层的 DIV(自己计算 cover 需要缩放的比率)

这样 图片 和 响应事件的DIV 都是同样比例缩放的

###

我能想到的也就是点击区域绝对定位在图片上, 然后top left用百分比

###

使用 background-size: cover

缩放背景图片以完全覆盖背景区,可能背景图片部分看不见。和 contain 值相反,cover 值尽可能大的缩放背景图像并保持图像的宽高比例(图像不会被压扁)。该背景图以它的全部宽或者高覆盖所在容器。当容器和背景图大小不同时,背景图的 左/右 或者 上/下 部分会被裁剪。

首先你在原图获取点击的位置,例如原图是 300 * 400 ,你的点击位置是 left: 150 , top: 200, 然后获取屏幕分辨率的宽度和高度,来计算。如果屏幕宽度/屏幕高度大于 3/4 ,说明他会按照宽度来拉伸,此时如果屏幕宽度为 400px,高度为400px, 那么位置计算为,ratio = 4/3 , newLeft = 150 * 4 / 3, newTop = 150 * 4 / 3。 如果是如果屏幕宽度/屏幕高度小于 3/4,如果此时,屏幕宽度为200,高度为 800,说明他会按照高度的比例来计算,因此,你的 ratio = 800/400 , newLeft = 150 * 2 ,newTop = 150 * 2

###

map标签了解一下

<map name="map1">
    <area href="URL地址" shape="填写shape值" coords="填写shape值的coords值 /">
    <area href="URL地址" shape="填写shape值" coords="填写shape值的coords值 /">
</map>

<area>
嵌套在 <map> 内部,定义图像映射中的区域。

alt:规定区域的替代文本。

href:定义了相关区域所连目标。

target:定义了在何处打开目标链接。

_blank:在新窗口打开。
_self:(默认)使得目标文档载入并显示在相同的框架或者窗口中作为源文档。
_parent:在父框架集中打开。
_top:在整个窗口中打开。
shape:定义了相关区域的形状。

default( 默认值):规定全部区域。
rect:矩形区域。
circle:圆形区域。
poly:多边形区域。
cooreds:定义相关区域的坐标。(和 shape 属性搭配使用)

当 shape 属性为 rect 时,代表相关区域为 矩形,cooreds 属性值为 (x1,y1,x2,y2),其中 x1、y1 为左上角的坐标,x2、y2 为右下角的坐标。
当 shape 属性为 circle 时,代表相关区域为 圆形,cooreds 属性值为 (x,y,radius),其中 x、y 为圆形的中心坐标,radius为圆形的半径。
当 shape 属性为 poly 时,代表相关区域为 多边形,cooreds 属性值为 (x1,y1,x2,y2,x3,y3…xn,yn),规定了多边形各个顶点的坐标,由于浏览器会自动闭合多边形,所以尾部坐标不必与第一个坐标相等。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 给body添加全屏背景图(backgroung-size

    给body添加全屏背景图(backgroung-size

  • C语言链队销毁问题(求求帮帮孩子)

    C语言链队销毁问题(求求帮帮孩子)

  • 请问安卓如何监听requestWindowFeature

    请问安卓如何监听requestWindowFeature

  • 字段为number,不能进行模糊查询码?

    字段为number,不能进行模糊查询码?

腾讯云代理商
海外云服务器