当前位置: 首页 > 知识库问答 >
问题:

D3拖动事件行为:DragEvent。x和DragEvent。y值源

太叔凌龙
2023-03-14

我不理解Mike Bostock的D3示例中D3 DrageEvent对象的行为。

这是我不理解的两个例子:圆圈拖动我拖动缩放

这是我不明白的代码:

函数拖动(d){d3.select(this.attr)(“cx”,d.x=d3.event.x).attr(“cy”,d.y=d3.event.y);}

在本例中,d. x和d. y是包含圆的最后一个中心的数据对象的一部分。

我希望这段代码的结果是,圆的属性cx和cy更改为当前值d3。事件x和d3。事件Y

在我看来,这应该是用户开始拖动鼠标时鼠标所在的坐标。如果用户没有开始准确地在圆圈的中心拖动,我希望圆圈会跳到用户开始拖动的位置,然后是正常的拖动行为。

我的问题是最初的跳跃没有发生,我不知道为什么。

我检查了d3的值。事件x和d3。事件当代码运行时,它们是完全相同的d.x和d.y值,不管用户在圆圈中单击的位置。我不明白为什么会这样。

最后,我将对象中的名称(并且只有名称)从d.x和d.y更改为d.m和d.n,代码开始执行我期望的操作。

函数拖动(d){d3.select(this). attr("cx", d. m=d3.event.x). attr("cy", d. n=d3.event.y);}

因此,当数据对象具有属性d.x和d.y时,代码的工作方式不同,而当数据对象具有属性d.m和d.n时,代码的工作方式也不同。看起来对象DrageEvent期望一个具有具体属性的数据对象,但这听起来很奇怪,我找不到文档记录。

如果有人已经知道答案,我希望避免检查D3源代码。

共有1个答案

扶开诚
2023-03-14

我认为奇怪的行为是故意的行为。

所有DrageEvent对象都有一个“主题”。主题不是生成拖动事件的SVG形状,而是与该SVG关联的数据(如果存在)。

更多信息请见:https://github.com/d3/d3-drag#drag_subject

因此,是的,如果基准对象具有特性x和y,则该值将指定给DrageEvent对象的特性dx和dy。

正如我们在d3源代码中看到的,在拖动中。js文件:

  dx = s.x - p[0] || 0;
  dy = s.y - p[1] || 0;
 类似资料:
  • 这个问题与Java表达式中子表达式的求值顺序不同,因为在这里肯定不是“子表达式”。需要加载它进行比较,而不是“求值”。这个问题是特定于Java的,表达式来自一个真实的项目,而不是通常为棘手的面试问题而设计的牵强附会的不切实际的构造。它应该是比较和替换习语的一行替换 它比x86 CMPXCHG指令还要简单,因此在Java中应该使用更短的表达式。

  • 问题内容: 考虑以下示例: 我不确定Java语言规范中是否有一项规定要加载变量的先前值以便与右侧()进行比较,该变量应按照方括号内的顺序进行计算。 为什么第一个表达式求值,而第二个表达式求值?我本来希望先被评估,然后再与自身()比较并返回。 这个问题与Java表达式中子表达式的求值顺序不同,因为这里绝对不是“子表达式”。需要 加载 它以进行比较,而不是对其进行“评估”。这个问题是特定于Java的,

  • 问题内容: 我在PHP文档中看到的最接近的是fread()给定的长度,但这没有指定从哪一行开始。还有其他建议吗? 问题答案: 您将无法从X行开始读取,因为行可以是任意长度。因此,您必须从头开始阅读,以计数要读取的行数才能到达X行。例如:

  • X|Y

    描述 (Description) 逻辑运算符[X|Y]匹配X或Y. 例子 (Example) 以下示例显示了逻辑运算符的用法。 package com.wenjiangs; import java.util.regex.Matcher; import java.util.regex.Pattern; public class LogicalOperatorDemo { private sta

  • 问题内容: 我想知道如何在基于X,Y鼠标坐标的android上执行拖动吗? 考虑两个简单的示例,Team Viewer / QuickSupport 分别 在远程智能手机和Windows Paint Pen上绘制“密码模式” 。 我所能做的就是模拟触摸(使用dispatchGesture()和也AccessibilityNodeInfo.ACTION_CLICK)。 我找到了这些相关链接,但不知道

  • 拖拉事件的种类 拖拉(drag)指的是,用户在某个对象上按下鼠标键不放,拖动它到另一个位置,然后释放鼠标键,将该对象放在那里。 拖拉的对象有好几种,包括元素节点、图片、链接、选中的文字等等。在网页中,除了元素节点默认不可以拖拉,其他(图片、链接、选中的文字)都是可以直接拖拉的。为了让元素节点可拖拉,可以将该节点的draggable属性设为true。 <div draggable="true">