当光标位于 Raphael 中的另一个图像上时,如何防止鼠标悬停事件失去对图像的关注?

How to prevent mouseover event lose focus on an image when cursor is on another image in Raphael?

当鼠标悬停在大女孩图像上时,小编辑图像(铅笔图像)将出现在大女孩图像之上。然后当鼠标悬停在铅笔图像上时,大女孩图像开始失去焦点,因此铅笔图像消失了。我尝试使用 onmouseleave=function() 但仍然无法解决这个问题。我尝试使用 css z-index 也无法修复此按钮。在 http://jsfiddle.net/zac1987/6o2g0c60/4/ 进行演示。代码:

var searchDl = 1;
var l = 0;
var r = Raphael(5, 5, 1950, 1950);
var p = r.path("M 550, 20 C 720,60 920,480 550,700").attr({stroke: "none"}),
    pt = p.getPointAtLength(l);
    e = r.image("http://2aek.com/inventory/test/1.png", pt.x, pt.y, 120, 120),

    totLen = p.getTotalLength(),

    e.node.onmouseover = function(){
        y = r.image("http://2aek.com/inventory/test/edit-button.png", pt.x, pt.y, 30, 30);
        z = r.image("http://2aek.com/inventory/test/delete-button.png", pt.x + 90, pt.y, 30, 30);
    };

    e.node.onmouseleave=function(){
        y.remove();
        z.remove();
        alert ("big-girl-image losing focus already!");
    };

小编辑图片在大女孩图片之上。如何让鼠标光标在小图上时仍然聚焦在大女孩图上?

在 mouseleave 处理程序中可以使用 javascript 和 setTimeout 来检查按钮是否在事件触发后悬停,但这真的很脏。
所以,我想知道您是否真的需要删除这些节点并每次都重新创建它们?

相反,您可以创建它们一次,应用一些 css 来隐藏它们(这里我使用 opacity : 0,但也可能是 visibility:hidden),利用CSS :hover 选择器来改变不透明度,如果我们悬停在主 <image> 元素上,最后应用一些内联样式:

var l = 0;
var r = Raphael(5, 5, 1950, 1950);
var p = r.path("M 550, 20 C 720,60 920,480 550,700").attr({stroke: "none"}),
    pt = p.getPointAtLength(l),
 e = r.image("http://2aek.com/inventory/test/1.png", pt.x, pt.y, 120, 120),
    // create our buttons here
 y = r.image("http://2aek.com/inventory/test/edit-button.png", pt.x, pt.y, 30, 30);
 z = r.image("http://2aek.com/inventory/test/delete-button.png", pt.x + 90, pt.y, 30, 30);
    // apply the css class
 y.node.setAttribute('class', 'buttons');
 z.node.setAttribute('class', 'buttons');

 e.node.onmouseover = function(){
        // set inline style, this will override the class one
  y.node.style.opacity = 1;
  z.node.style.opacity = 1; 
     };
 
 e.node.onmouseleave=function(){
        // remove the inline style
  y.node.style.opacity = '';
        z.node.style.opacity = '';
 };
 
 e.node.onmousedown=function(){
  y.node.style.opacity = '';
  z.node.style.opacity = '';
 };
.buttons{ opacity:0;}
.buttons:hover{ opacity:1;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.4/raphael-min.js"></script>
<img src="http://2aek.com/inventory/test/handsometemp.PNG" />