我有以下情况:一个div,里面有条形(具有一定高度的div)来显示图表。在带有条形的主 div 顶部,放置了一个蒙版图像,因此您可以看到图形而不是条形。(我有一个男人和一个女人来展示统计数据,例如见附图)。
这些条附加到鼠标移动事件以在工具提示中显示有关条的信息。
如果我将鼠标悬停在条上,我的 mousemove 不会显示,因为图像挡住了它。是否可以将鼠标悬停在图像上,并且仍然将 mousemove 事件绑定到条形以获取我想要的信息?最终结果是显示带有来自条形图的信息的工具提示。
我有以下情况:一个div,里面有条形(具有一定高度的div)来显示图表。在带有条形的主 div 顶部,放置了一个蒙版图像,因此您可以看到图形而不是条形。(我有一个男人和一个女人来展示统计数据,例如见附图)。
这些条附加到鼠标移动事件以在工具提示中显示有关条的信息。
如果我将鼠标悬停在条上,我的 mousemove 不会显示,因为图像挡住了它。是否可以将鼠标悬停在图像上,并且仍然将 mousemove 事件绑定到条形以获取我想要的信息?最终结果是显示带有来自条形图的信息的工具提示。
您可以在图像顶部制作一些额外的 div,并将它们用于悬停。但这可能会有点混乱。
或者你可以制作一个包含四个区域的 HTML 图像映射,每个区域都有一个 onmouseover 属性,这样会更简洁:
<MAP NAME="mymap">
<AREA SHAPE="RECT" COORDS="0, 0, 100, 400" HREF="" OnMouseOver="tooltip('bar1')" NAME="bar1">
<AREA SHAPE="RECT" COORDS="100, 0, 100, 400" HREF="" OnMouseOver="tooltip('bar2')" NAME="bar2">
<AREA SHAPE="RECT" COORDS="200, 0, 100, 400" HREF="" OnMouseOver="tooltip('bar3')" NAME="bar3">
<AREA SHAPE="RECT" COORDS="300, 0, 100, 400" HREF="" OnMouseOver="tooltip('bar4')" NAME="bar4">
</MAP>
<IMG SRC="mybarmask.png" USEMAP="#mymap" />
这里的坐标很可能是错误的,我不在我的电脑上,所以我无法测试它......
假设您的宽度相等,则需要:
查找容器的偏移量:
var DOMOffset = function(el) {
var curleft, curtop;
curleft = curtop = 0;
if (el.offsetParent) {
do {
curleft += el.offsetLeft;
curtop += el.offsetTop;
} while (el = el.offsetParent);
}
return [curleft,curtop];
}
为您想要处理的所有事件附加到您的图像侦听器,并将它们绑定到一个函数,该函数将它们委托给适当的 DOM 元素。类似的东西Math.floor((event.clientX - container_offset_X) / count_of_your_bar * width_of_your_bar)
应该为您提供正确 bar 元素的从零开始的索引。委托本身可以通过修改以下代码来完成:
quickDelegate = function(event, target) {
var eventCopy = document.createEvent("MouseEvents");
eventCopy.initMouseEvent(event.type, event.bubbles, event.cancelable, event.view, event.detail, event.pageX || event.layerX, event.pageY || event.layerY, event.clientX, event.clientY, event.ctrlKey, event.altKey, event.shiftKey, event.metaKey, event.button, event.relatedTarget);
target.dispatchEvent(eventCopy);
};
event
您的图像捕获的原始事件在哪里,并且target
是您检测到的 bar DOM 元素。
请注意,我前段时间编写了这个委托函数,我只针对 Firefox 和 Chrome。你可能需要修复一些东西才能让它在 IE 上运行。
mouseenter 和 mouseleave 甚至可以通过其他元素工作。
这是我解决这个问题的方法(解决方案):
对于这些数字中的每一个,我都会有两个图像,一个内部是空白的,所以只有图形的边框,一个从上到下是完全彩色的(橙色)。
那么你可以有这样的东西:
<div class="empty">
<div class="full"> </div>
</div>
具有.empty
空图像,background
具有适当的高度和宽度以及position:relative
. .full
具有经过调整height
但固定宽度和的彩色全彩色图像position:absolute; bottom: 0; left=0
。
然后在鼠标悬停上,.empty
或者.full
你可以做任何你想做的事情