【问题标题】:image-map associated with more than one image与多个图像关联的图像映射
【发布时间】:2011-04-08 13:41:56
【问题描述】:

假设页面上有几张相同的图片,都与同一张地图相关联:

<img id="img1" usemap="#my-map" .... >
<img id="img2" usemap="#my-map" .... >
<img id="img3" usemap="#my-map" .... >

<map name="my-map">
  <area  .... coords=... class="foo">
  <area ....  coords=... class="bar">
</map>

每个区域都有一个鼠标悬停事件处理程序。

在那些区域鼠标悬停事件处理程序的范围内,即仅引用该区域的鼠标悬停事件的本地变量,没有全局变量,是否可以知道鼠标在哪个图像上? DOM 是否暴露了一些暂时的关系,因此该区域的 mouseover 事件处理程序可以回答“我此时正在映射哪个图像?”的问题

请排除将处理程序直接附加到图像本身。我不是试图解决问题,而是试图找出在该区域的 mouseover 事件处理程序中可以知道的关于当前关联或“热”图像的内容。

谢谢

【问题讨论】:

    标签: javascript mouseover area imagemap


    【解决方案1】:

    您可以使用类似的方法来查找 id。

    $('area').bind('mouseover',function(e) {
        alert(e.fromElement.id); // will alert the ID of the image
    })​;
    

    您可以从fromElement 获得更多信息,例如 src、outerHTML 等。最好的选择是使用 console.log(e);并在 Firefox 中使用 Google Chrome 或 Firebug 浏览它转储到控制台的内容。

    编辑 这种方法充其量是善变的,不应依赖。 e 中可用的内容似乎取决于您要绑定的内容以及您获得的功能(单击、鼠标悬停等)。

    【讨论】:

    • 感谢您抽出宝贵时间回复。 e.fromElement 在其他情况下确实会有所帮助。我认为 document.elementFromPoint(e.clientX,e.clientY) 可能会返回当前关联的图像,但它会返回 AREA。我会继续四处寻找,但可能是 DOM 没有在 AREA 的鼠标悬停事件中公开“热”图像的句柄。
    • 四处寻找相关目标。会回来报告的。
    • relatedTarget 似乎不可靠,至少在我对 IE8 的初步测试中是这样——它有时指向相邻的图像,甚至没有与之关联的地图,有时指向包含的 div “热”图像。
    • relatedTarget 根据鼠标是进入还是离开,指向不同的元素,冒泡状态也起作用。
    • 你必须要有创意。也许像onmousedown 这样的东西隐藏了map 元素,onmouseup 获取图像所需的信息并在完成后再次显示map 元素。这将导致为图像而不是地图调用 mouseup 事件。
    猜你喜欢
    • 1970-01-01
    • 2011-11-24
    • 2016-04-11
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    相关资源
    最近更新 更多