面试题
在一个 100x100 像素图像的正中间定义了一个圆形区域,半径为5px。
实现图片的中心圆形区域可点击跳转到https://wangxiaokai.vip
,图片的其他区域不可点击。
背景知识-图像映射
图像映射,指带有可点击区域的图像。
map
和img
标签同时使用,可定义图像映射,指定的区域可点击。
实现图像映射需要什么物料?
需要借助3个HTML标签:
- img
- map
- area
map标签
map标签可定义客户端图像映射
属性 | 是否必须 | 作用 |
---|---|---|
id | 是 | 为 map 标签定义唯一的名称。 |
name | 否 | 为 image-map 规定的名称。 |
<img>
中的usemap
属性可引用<map>
中的id
或name
属性(取决于浏览器),所以我们应同时向<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>
中的 id
或 name
属性(取决于浏览器),进行链接。
解答
60分答案
使用覆盖一层透明的元素,并使用js绑定点击事件,作为响应。
1 | <style> |
80分答案
在60分答案的基础上,使用<a>
标签的特性,作点击事件的响应。
1 | <style> |
满分答案
使用图像映射,精准实现点击区域可点击。
其中,coords
的取值含义:
在 100x100 像素图像的正中间,坐标(x, y) = (50, 50)
,半径为5
。
1 | <img src ="demo.png" width="100" height="100" alt="demo" usemap ="#vipmap" /> |