面试题

在一个 100x100 像素图像的正中间定义了一个圆形区域,半径为5px。
实现图片的中心圆形区域可点击跳转到https://wangxiaokai.vip,图片的其他区域不可点击。

背景知识-图像映射

图像映射,指带有可点击区域的图像。
mapimg标签同时使用,可定义图像映射,指定的区域可点击。

实现图像映射需要什么物料?

需要借助3个HTML标签:

  • img
  • map
  • area

map标签

map标签可定义客户端图像映射

属性 是否必须 作用
id 为 map 标签定义唯一的名称。
name 为 image-map 规定的名称。

<img>中的 usemap 属性可引用 <map>中的 idname 属性(取决于浏览器),所以我们应同时向<map> 添加 id 和 name 属性。

area标签

area标签定义图像映射中的区域

属性 取值 作用
coords 坐标 定义可点击区域(对鼠标敏感的区域)的坐标。
href url 定义此区域的目标 URL。
shape default, rect ,circle, poly 定义区域的形状。
target _blank, _parent, _self, _top 规定在何处打开 href 属性指定的目标 URL。
alt text 定义此区域的替换文本。

coords属性

coords 属性规定区域的 x 和 y 坐标。

coords 属性与shape 属性配合使用,来规定区域的尺寸、形状和位置。

图像左上角的坐标是 “0,0”。

圆形:shape=”circle”,coords=”x,y,r”

这里的 x 和 y 定义了圆心的位置(”0,0” 是图像左上角的坐标),r 是以像素为单位的圆形半径。

多边形:shape=”polygon”,coords=”x1,y1,x2,y2,x3,y3,…”

每一对 “x,y” 坐标都定义了多边形的一个顶点(”0,0” 是图像左上角的坐标)。定义三角形至少需要三组坐标;高纬多边形则需要更多数量的顶点。

多边形会自动封闭,因此在列表的结尾不需要重复第一个坐标来闭合整个区域。

矩形:shape=”rectangle”,coords=”x1,y1,x2,y2”

第一个坐标是矩形的一个角的顶点坐标,另一对坐标是对角的顶点坐标,”0,0” 是图像左上角的坐标。
请注意,定义矩形实际上是定义带有四个顶点的多边形的一种简化方法。

img标签链接map

<img>标签,使用usemap属性,来指定map(热点地图)。
usemap属性通常引用 <map>中的 idname 属性(取决于浏览器),进行链接。

解答

60分答案

使用覆盖一层透明的元素,并使用js绑定点击事件,作为响应。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<style>
.wrap{
position:relative
}
.click{
width: 10px;
height: 10px;

position:absolute;
top:50%;
left:50%;
margin-left: -5px;
margin-top:-5px;
border-radius:50%;
overflow:hidden;
}
</style>

<div class="wrap">
<img src ="demo.png" width="100" height="100" alt="demo" />
<div class="click" id="click"></div>
</div>

<script>
document.getElementById('click').addEventListener = function(){
location.href = 'https://wangxiaokai.vip';
}
</script>

80分答案

在60分答案的基础上,使用<a>标签的特性,作点击事件的响应。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<style>
.wrap{
position:relative
}
.click{
width: 10px;
height: 10px;

position:absolute;
top:50%;
left:50%;
margin-left: -5px;
margin-top:-5px;
border-radius:50%;
overflow:hidden;
}
</style>

<div class="wrap">
<img src ="demo.png" width="100" height="100" alt="demo" />
<a class="click" href="https://wangxiaokai.vip" target="_blank"></a>
</div>

满分答案

使用图像映射,精准实现点击区域可点击。
其中,coords的取值含义:
在 100x100 像素图像的正中间,坐标(x, y) = (50, 50),半径为5

1
2
3
4
5
<img src ="demo.png" width="100" height="100" alt="demo" usemap ="#vipmap" />

<map id="vipmap" name="vipmap">
<area shape="circle" coords="50,50,5" href="https://wangxiaokai.vip" alt="cool" />
</map>