使用Map标签指定点击区域时的兼容性问题

电商m站的首页,有一个需求是配一张大的banner图,然后指定某些区域是热区,点击之后跳转到不同的活动页。

听起来简单明了,实现也比较容易,立刻就想起来有个map标签,简直就是为这个需求量身定做。

简单说下做法:

我们首先会和后台约定一些规则,定义一个json对象。比如:

{
    type: 1,
    width: 100,
    height: 100,
    clickArea: [
        {
            shape: ‘circle‘,
            coords: ‘10,10,10‘,
            href: ‘//jd.com‘
        },
        {
            shape: ‘rect‘,
            coords: ‘10,10,10,10‘,
            href: ‘//m.jd.com‘
        }
    ],
    img: ‘一张图片.jpg‘
}

我们可以约定,type为1就是map标签。之后按照我们约定的解析规则,把页面渲染上去就好了。

当然,实际上不会这么简单,一般来说,我们的首页和活动页是三端同步的。Android和iOS就不能直接使用上面的例子,还需要做一定的修改,但是大同小异。

这次出问题的地方就在这个map标签。

我们使用了模板来渲染页面,之后出来的元素大概是这样。

<img src ="planets.gif" alt="Planets" usemap ="#planetmap" />

<map name="planetmap">
  <area shape="rect" coords="0,0,110,260" href="sun.htm" alt="Sun" />
  <area shape="circle" coords="129,161,10" href="mercur.htm" alt="Mercury" />
  <area shape="circle" coords="180,139,14" href="venus.htm" alt="Venus" />
</map>

在chrome中可以正常点击,一旦到了其他浏览器,诸如FireFox,则无法点击。

同事问到我这个问题的时候,我真是觉得十分有趣,当时一起寻找是哪里的问题。

中间想了很多种可能,思路一直停留在动态计算影响了map的使用等。但是一直不能复现,后来仔细观察之后才发现,原来是img标签在书写的过程中,漏掉了usemap里的#。

咳咳咳……

在chrome中好使,是因为chrome帮我们做了兼容。

把这个bug记录下来,也算是长长记性。

PS:

后来我查了一下,之所以同事会出这个问题,也是因为map标签用的较少,而常用的label标签中的for属性,是不需要加#的,加上了反而会有错。

当然,label和map中的用法也不同,不论如何,引以为戒。

PPS:

下一篇写现在工作中用到的首页活动页布局方案。

PPPS:

520快乐!

原文地址:https://www.cnblogs.com/liuyongjia/p/9064414.html

时间: 2024-11-05 18:36:11

使用Map标签指定点击区域时的兼容性问题的相关文章

【html】百度经常使用的 map标签

一.含义 带有可点击区域的图像映射 二.浏览器支持情况 所有主流浏览器都支持 三.注意事项 area 元素永远嵌套在 map 元素内部.area 元素可定义图像映射中的区域. <img>中的 usemap 属性可引用 <map> 中的 id 或 name 属性(取决于浏览器),所以我们应同时向 <map> 添加 id 和 name 属性. 四.属性 id           必填       为 map 标签定义唯一的名称. name    可选       为 ima

HTML &lt;map&gt; 标签-创建带有可点击区域的图像映射

定义和用法 定义一个客户端图像映射.图像映射(image-map)指带有可点击区域的一幅图像. 所有主流浏览器都支持 <map> 标签. 注释:area 元素永远嵌套在 map 元素内部.area 元素可定义图像映射中的区域. <img>中的 usemap 属性可引用 <map> 中的 id 或 name 属性(取决于浏览器),所以我们应同时向 <map> 添加 id 和 name 属性. 实例 带有可点击区域的图像映射: <html> <

带有可点击区域的图像映射:HTML &lt;map&gt; 标签

实例 带有可点击区域的图像映射: <img src="planets.jpg" border="0" usemap="#planetmap" alt="Planets" /> <map name="planetmap" id="planetmap"> <area shape="circle" coords="180,139,14

HTML &lt;area&gt; 标签 带有可点击区域的图像映射(图像映射指的是带有可点击区域的图像)

例子: <img src="planets.gif" width="145" height="126" alt="Planets" usemap="#planetmap"> <map name="planetmap"> <area shape="rect" coords="0,0,82,126" href="

bootstrap 弹出框点击其他区域时弹出框不消失选项设置

默认情况下,bootstrap 弹出框点击其他区域时,弹出框会自动关闭,在很多时候,我们可能会希望达到和原生弹出框一样的效果,避免不小心点击其他区域时弹框自动隐藏,尤其是对于一些复杂的表单,重复填写可能会带来很不好的体验效果,所以,我们会希望不会发生这种情况,事实上bootstrap dialog提供了大量的选项可以设置各种dialog的行为和效果.如下所示: <div class="modal fade" id="myModal" tabindex=&quo

带有可点击区域的map图像映射

如果需要规定一个不规则点击区域可用map图像映射 <!doctype html> <html> <head> <meta charset="utf-8"> <title>map图像映射</title> </head> <body> <img src="3.jpg" border="0" usemap="#picmap" /&g

【IE8】在IE8 使用 button 时需要为标签指定相应的 type 类型

在日常开发的时候我们会知道 button 按钮在不设置 type 属性时,在不同的浏览器作用不一样. 强烈建议大家在使用 button 时需要为标签指定相应的 type 类型. 原文地址:https://www.cnblogs.com/homehtml/p/12540135.html

map标签结合area的应用

标签作用: 图像映射 标签介绍: 以下三个标签必须同时使用: <img>标签:插入一张图片 主要属性: src 图片的路径,可以是相对路径,也可以是绝对路径 alt 定义图片区域的替换文本 usermap 可引用 <map> 中的 id 或 name 属性(取决于浏览器),所以我们应同时向 <map> 添加 id 和 name 属性,并且值必须一样,只是usermap属性多一个#号 <map>标签: 主要属性: id 为 map 标签定义唯一的名称 name

HTML &lt;area&gt;&lt;map&gt;标签及在实际开发中的应用

之前,我一直以为HTML <area>是一个鸡肋HTML,估计到了HTML5时代会被废弃的命.但是,最近一查资料,乖乖了个咚,不仅没被废弃,反而发展了,新增了一些标签属性,例如rel,media,hreflang等. 然后进一步研究发现,尼玛这货居然还可以用来解决一个困扰我很多年的棘手问题,形象立马高大上了起来. 一.HTML <area>原本作用 HTML <area>原本作用是给<img>图像标记热点区域用的.例如一张中国省份地图,点击对应省份显示对应省