Javascript D3.js:使用origin()函数按组中包含的元素拖动组(';g';)中的所有内容

Javascript D3.js:使用origin()函数按组中包含的元素拖动组(';g';)中的所有内容,javascript,d3.js,draggable,Javascript,D3.js,Draggable,我不确定发生了什么,但我有两个非常简单的例子来说明我的问题 两个示例都有一个包含“rect”和“text”的“g” 在第一个示例中,我将在“g”本身上设置拖动,即,如果将鼠标向下移动到该组中的任何位置并拖动,它将在视点周围拖动整个对象(包括“rect”和“text”)。 在第二个例子中,它不起作用,这是我感兴趣的,我只希望文本是用户可以抓取来拖动整个组的内容 我试了很多次。有些根本不起作用,有些起作用,但会像我在这里提供的示例一样闪烁: 这是怎么回事,它闪烁着,我做错了什么 任何帮助都将不胜

我不确定发生了什么,但我有两个非常简单的例子来说明我的问题

两个示例都有一个包含“rect”和“text”的“g”

在第一个示例中,我将在“g”本身上设置拖动,即,如果将鼠标向下移动到该组中的任何位置并拖动,它将在视点周围拖动整个对象(包括“rect”和“text”)。

在第二个例子中,它不起作用,这是我感兴趣的,我只希望文本是用户可以抓取来拖动整个组的内容

我试了很多次。有些根本不起作用,有些起作用,但会像我在这里提供的示例一样闪烁:

这是怎么回事,它闪烁着,我做错了什么

任何帮助都将不胜感激


谢谢

我不确定它闪烁的确切原因(因为我对D3不太熟悉),但让它停止的一种方法是使用D3的源事件:

// 50 is the offset x/y position you set for your text
var x = d3.event.sourceEvent.pageX - 50;
var y = d3.event.sourceEvent.pageY - 50;
编辑:当上面的代码工作时,它会导致框最初“跳转”到文本的坐标,更好的修复方法是以您的第一个示例为例,只过滤未在文本元素上执行的事件。尝试将以下内容放在拖动方法的顶部:

if(d3.event.sourceEvent.target.nodeName !== 'text') {
    return;
}

尝试
d3.event.sourceEvent.stopPropagation()内部拖动功能

我已详细回答了相同的问题。希望能有帮助。
// 50 is the offset x/y position you set for your text
var x = d3.event.sourceEvent.pageX - 50;
var y = d3.event.sourceEvent.pageY - 50;
if(d3.event.sourceEvent.target.nodeName !== 'text') {
    return;
}