如何使绝对定位的图像区域地图可以用鼠标点击
How to make absolute positioned image area maps clickable with mouse?
我使用绝对定位将几个图像放置在彼此之上。这些图像是部分透明的,并具有 html area
和map
,仅使可见部分可单击。在jQuery中,我将鼠标事件附加到area
标签上。
这适用于一个图像:mouseenter 和mouseleave 仅在输入图像的映射部分时触发。
问题是它仅适用于顶部图像。对于所有其他的,它不会触发事件,CSS悬停不起作用,因为它上面还有另一个图像。尽管事实上area
s不重叠并且map
在图像前面。
下面是问题的演示:http://markv.nl/stack/imgmap2/
您可以将单个完全透明的图像放在所有单个图像的顶部,并将所有图像映射区域附加到该图像。它将充当鼠标事件的捕获元素,您仍然可以更改所有单个图像。
一个直接的答案/解决方案...
为什么不使用画布/SVG进行绘图?有很多库使任务变得容易。其中之一是RaphaëlJS(查看此示例)。该库的优点是它允许鼠标交互。
您可能会考虑的另一个库是 EaselJS,但它在不支持 <canvas>
的浏览器中不起作用,因此不支持 IE <9。
仅当图像不重叠时,它才有效(见图)。在您的情况下,所有图像都具有完全相同的大小,并且相互堆叠。由于浏览器将图像视为实体对象(它们不关心透明度),因此它无法确定您当前要悬停哪个图像?
+-----------+-----------+
| | |
| img1 | img2 |
| | |
| | |
+-----------+-----------+
| | |
| img3 | img4 |
| | |
| | |
+-----------+-----------+
但是,您可以解决此问题:
只需在其中一张包含所有区域的图像上使用单个图像映射,并且使用一点 javascript,您就可以在所有其他图像上触发悬停效果。
$("area").hover(function(){
var $target = $("#"+$(this).data("target")); // getting the target image
$target.attr("src",$target.attr("src").replace("slice","slice-focus")); //replacing the src with the src of the hover image
},function(){
var $target = $("#"+$(this).data("target"));
$target.attr("src",$target.attr("src").replace("focus-","")); //revert the changes
});
基于您的代码的工作示例:jsFiddle-Demo
您还可以宫殿具有固定高度和宽度的透明div,该div 将具有带有绑定函数的 onclick() 事件。 像这样的一些东西:
<div style="position: absolute; top: 10px; left: 10px; width: 100px; height: 100px;" onclick="dosomething();"></div>
- 如何停止地图移动时,鼠标悬停在标记在谷歌地图API 3
- 谷歌地图 api v3 搜索多边形没有鼠标事件
- 如何在谷歌地图上用鼠标移动标记
- 地图,rails 4.2,javascript,鼠标悬停,只工作一次(或两次).然后在重新加载之后
- 在谷歌地图中用鼠标移动标记
- 谷歌地图jQuery-通过鼠标点击获取LatLng
- 重叠圆圈阻止鼠标悬停事件-谷歌地图v3
- 谷歌地图v3获取鼠标滚轮事件
- 检测谷歌地图 v3 多边形上的鼠标事件的 shiftKey
- 将鼠标单击和鼠标悬停事件附加到 Bing 地图图钉不起作用
- 将鼠标悬停在地图上时,取消选择图像映射的选定区域
- 使用OpenLayers和谷歌地图,鼠标光标和地图上的点不是内联的
- 鼠标悬停事件仅适用于上次创建的传单地图
- 获取/设置地图图像鼠标位置
- 使用 jquery 将鼠标悬停在地图区域时添加边框
- 如何在必应地图 v7 中禁用鼠标滚动标记
- 由谷歌地图绘制的矩形 绘图管理器不会触发鼠标移动事件
- 谷歌地图API:显示代码中的鼠标悬停窗口
- 每次点击鼠标时都会刷新谷歌地图
- 水平鼠标滚轮滚动与地图 JQuery 冲突