小编Mic*_*wab的帖子

检测多个重叠SVG元素上的鼠标事件

我正在尝试检测部分重叠的SVG元素上的mousemove事件,如此图像中所示

在此输入图像描述

小提琴

<svg>
    <rect id="red"    x=10 y=10 width=60 height=60 style="fill:#ff0000" />
    <rect id="orange" x=80 y=10 width=60 height=60 style="fill:#ffcc00" />
    <rect id="blue"   x=50 y=30 width=60 height=60 style="fill:#0000ff; fill-opacity: 0.8" />
</svg>

$('rect').on('mousemove', function()
{
    log(this.id);
});
Run Code Online (Sandbox Code Playgroud)

现在,当鼠标悬停在蓝色/红色交叉点上时,我想检测这两个元素上的鼠标事件,蓝色/橙色组合则相同.正如您在日志中看到的那样,在这些情况下,事件当前仅针对蓝色框触发,因为它位于顶部.

这与指针事件有关,因为我可以通过将蓝色元素的指针事件设置为无,在悬停蓝色元素时获取红色和橙色元素来触发事件.但后来我没有得到蓝盒的事件,所以这也不是一个可行的选择.

我将使用哪个库解决这个问题.我在这个d3示例中查看了事件冒泡,但这仅适用于嵌套在DOM中的元素.我有很多可能与许多其他元素重叠的独立元素,因此无法以这种方式构建我的DOM.

我猜最后的办法是找到当前鼠标位置的元素,并手动触发事件.因此,我查看了document.elementFromPoint(),但这只会产生1个元素(并且在SVG中可能不起作用?).我发现jQuerypp功能,即发现在给定位置的元素,见这里.这个例子看起来很棒,除了它是DIV而不是SVG内部.当用svg矩形元素替换div时,小提琴似乎破了.

我该怎么办?!

javascript svg event-propagation pointer-events

6
推荐指数
1
解决办法
2358
查看次数

猫鼬查找和删除

我正在尝试删除满足查询的多个文档。但是,我需要将这些文档的数据存储在单独的集合中以实现撤消功能。我让它工作的唯一方法是使用多个查询:

Data.find(query).exec(function(err, data)
{
    Data.remove(query).exec(function(err2)
    {
        ActionCtrl.saveRemove(data);
    });
});
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?在这篇文章中:如何使用 Node.js Mongoose 删除文档?建议使用 find().remove().exec():

Data.find(query).remove().exec(function(err, data)
{
    ActionCtrl.saveRemove(data);
});
Run Code Online (Sandbox Code Playgroud)

但是data通常是1,不要问我为什么。我可以在不无限嵌套查询的情况下执行此操作吗?谢谢!

database mongoose mongodb node.js

6
推荐指数
1
解决办法
3万
查看次数