D3 区分具有拖动行为的元素的单击和拖动

2023-12-09

我无法成功区分click事件和drag使用 D3.js v3 绑定到两者的元素上的事件。下面代码中的圆圈被分配了拖动行为和click听众。演示在这里

var dragGroup = d3.behavior.drag()
    .on('dragstart', function () {
    console.log('Start Dragging Group');
})
    .on('drag', function (d, i) {
    d.x += d3.event.dx;
    d.y += d3.event.dy;
    d3.select(this).attr("transform", "translate(" + d.x + "," + d.y + ")");
});

var dragCircle = d3.behavior.drag()
    .on('dragstart', function () {
    d3.event.sourceEvent.stopPropagation();
    d3.event.sourceEvent.preventDefault();
    console.log('Start Dragging Circle');
})
    .on('drag', function (d, i) {
    d.cx += d3.event.dx;
    d.cy += d3.event.dy;
    d3.select(this).attr('cx', d.cx).attr('cy', d.cy);
});

var svg = d3.select('body').append('svg').attr('viewBox', '-50 -50 300 300');
var g = svg.selectAll('g').data([{
    x: 10,
    y: 10
}])
    .enter().append('g').call(dragGroup);

g.append('rect').attr('width', 100).attr('height', 100);

g.selectAll('circle').data([{
    cx: 90,
    cy: 80
}]).enter()
    .append('circle')
    .attr('cx', function (d) {
    return d.cx;
})
    .attr('cy', function (d) {
    return d.cy;
})
    .attr('r', 30)
    .call(dragCircle)
    .on('click', function () {
    console.log('clicked circle');
});

每当我单击示例中的圆圈时,控制台都会记录drag事件以及click事件。拖动时我也会得到相同的行为,首先是drag事件已记录并开启mouseup the click事件被记录。

分别处理这些事件的正确方法是什么?
该用例是尝试处理树布局中的节点单击和节点拖/放。


缺少的关键部分是检查事件的默认行为是否已被阻止。也就是说,有一个匹配的兄弟姐妹d3.event.preventDefault() -- d3.event.defaultPrevented。您需要在您的click处理程序以查看是否正在进行任何拖动操作。

另请参阅答案这个问题.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

D3 区分具有拖动行为的元素的单击和拖动 的相关文章

  • 我如何在 AngularJS 中监听点击并按住的情况?

    我制作了一个时间计数器 您可以通过单击按钮来增加或减少时间 然而 我希望当我单击并按住按钮时 时间的价值会不断攀升 所以目前如果你看到我的Plunkr http plnkr co edit BxX9x5zYFMXVqt5JsN1F p pr
  • 取消html5浏览器中的单图请求

    我正在动态加载 大 图像以绘制到 html5 画布中 如下所示 var t new Image t onload t src http myurl 但每隔一段时间就会想取消图片请求完全地 我想出的唯一方法是设置src to i e t sr
  • 网站 YouTube 嵌入视频不断播放

    我正在使用 youtube 提供的 iframe 在我的网站上嵌入视频 我还使用了一个 css 弹出窗口 这是我从这个页面学到的http www pat burt com web development how to do a css po
  • jquery 验证错误位置

    这看起来很简单 但我无法弄清楚 我正在使用 jquery 验证插件 我验证所有文件 但我想要的是在输入文本行中显示验证消息警报 例如在电子邮件输入中 请填写电子邮件地址 但现在它出现在所有字段下 在我的html中
  • 如何按照编写的顺序迭代 javascript 对象属性

    我发现了代码中的一个错误 我希望通过最少的重构工作来解决该错误 此错误发生在 Chrome 和 Opera 浏览器中 问题 var obj 23 AA 12 BB iterating through obj s properties for
  • 即使我可以监视其他方法,也无法监视事件处理程序

    我想使用 Jest Jasmine Enzyme 测试 React 中的事件处理程序 MyComponent js import React from react class MyComponent extends React Compon
  • 在为 RXJS 可观察量编写测试时,如何避免让调度程序通过我的业务逻辑?

    我发现使某些测试通过的唯一方法是显式地将调度程序传递给函数 为了便于说明 请考虑以下函数 function doStuff stream return stream delay 100 filter x gt x 2 0 map x gt
  • Google Chrome 106 可拖动导致元素消失

    使用拖放元素时 绝对定位元素中包含的大多数其他元素都会从屏幕上消失 如果我调整窗口大小 这些元素会出现 但在开始拖动时会再次消失 我在最新版本的 Google Chrome 106 和 Beta 版本 107 0 5304 18 以及现在的
  • Typeahead.js substringMatcher 函数说明

    我只是在做一些研究Typeahead js这是一个非常酷的图书馆 感谢文档 我已经成功地获得了一个基本的示例 该文档也非常好 但是我试图弄清楚以下代码块实际上在做什么 var substringMatcher function strs r
  • 使用 JS 合并具有相同值的相邻 HTML 表格单元格

    我已经为此苦苦挣扎了一段时间 我有一个根据一些 JSON 数据自动生成的表 该数据可能会有所不同 我想合并第一列中具有相同值的相邻单元格 例如此表中的 鱼 和 鸟 table tr td fish td td salmon td tr tr
  • 如何使JavaScript函数在Eclipse“大纲视图”中可见?

    我有这样的代码 但如果它在匿名函数中定义 则无法打开函数大纲 类没有问题 我该如何概述something2 请分享一些提示 我可以将所有函数标记为构造函数 但这是无效的方法 start of track event required deb
  • 将数组排序为第一个最小值、第一个最大值、第二个最小值、第二个最大值等

    编写一个JS程序 返回一个数组 其中第一个元素是第一个最小值 第二个元素是第一个最大值 依此类推 该程序包含一个函数 该函数接受一个参数 一个数组 该函数根据要求返回数组 输入示例 array 2 4 7 1 3 8 9 预期输出 1 9
  • Twitter 嵌入时间轴小部件

    我继续下载http platform twitter com widgets js http platform twitter com widgets js And the http platform twitter com embed t
  • Nodejs mysql 获取正确的时间戳格式

    我在用着mysqljs https github com mysqljs mysql得到结果后sql我变得不同TimeStamp格式如下 created at Sat Jul 16 2016 23 52 54 GMT 0430 IRDT 但
  • JavaScript onresize 事件多次触发

    我在尝试仅在触发 onresize 事件时运行一次函数时遇到一些麻烦 我已经看过这个问题DOM onresize 事件 https stackoverflow com questions 1500312 javascript onresiz
  • Jquery - 通过在字符串中构建 id 的 id 获取元素

    我在使用 jquery 元素时遇到问题 我正在 var 中构造名称 例如 var myId myGotId myId attr title changed myId 返回空 我想通过 id 获取我的元素 但动态构建我的 Id 连接字符串 编
  • 使用异步调用时如何从 javascript 更新元刷新?

    我有一个系统 它使用元刷新来注销页面 该系统会在空闲用户后进行清理 不用担心 服务器也会导致会话超时 我开始通过 ajax 进行一些操作 不是真正的 xml 但这不是重点 我可以运行从异步请求返回的javascript 所以我想知道是否可以
  • 如何在 gulp.src 中使用基本正则表达式?

    我正在尝试选择两个文件gulp src highcharts js and highcharts src js 当然 我知道我可以使用数组表达式显式添加这两个表达式 但出于学习目的 我尝试为它们编写一个表达式 我读过可以使用简单的正则表达式
  • 单击列表时使用 bootstrap Dropdown 防止下拉菜单消失

    我正在使用使用引导下拉菜单 http twitter github com bootstrap javascript html dropdowns生成下拉菜单 我想防止点击菜单时菜单消失 我已经实现了以下代码 但它不起作用 知道如何修复它吗
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没

随机推荐

  • Springboot TomcatEmbeddedServletContainer KeepAliveTimeout 不起作用

    我已将 Spring Boot 嵌入式 tomcat 服务器中的保持活动超时设置为 30 秒 所以我在下面的Application java中使用 Bean public EmbeddedServletContainerFactory ge
  • 无法在 DLL“opengl32.dll”中找到名为“glBindFramebuffer”的入口点。在 MonoGame 3.0 中

    最近我在我的笔记本电脑上安装了 MonoGame 3 0 我从项目模板中获取了一个新的 MonoGame Windows OpenGL 项目 并尝试运行它 但我得到了这个异常 Unable to find an entry point na
  • psql:显示带有 \df 且*不*包含特定模式的函数

    因为我将 dblink 扩展安装到 默认 公共模式中 df将显示所有 dblink 相关函数 我只想查看自定义功能 如何查看不包含文本 dblink 的函数 到目前为止我尝试过的 df dblink df dblink df dblink
  • .load 与 .on(“加载”)

    我正在 div 中加载一个 php 页面 该页面采用已发布的变量来显示正确的内容 它的工作原理是这样的 mainArea load page php folder a fadeIn passes vars but all my jquery
  • Qt 通过 QNetworkAccessManager 扫描 Wi-Fi

    欢迎 我在扫描 Wi Fi 以获得 Wi Fi 中所有可用的连接时遇到问题 到目前为止我已经写了这段代码 include
  • java.util.Iterator 但无法导入 java.util.Iterator

    鉴于此代码 import java util Iterator private static List
  • Matlab打印板

    我是 Matlab 新手 有没有办法使用printmat打印2个字的标题 结果示例如下 Title One Title Two Title Three 11 22 33 22 33 44 这是我当前尝试修改的代码 matA 11 22 33
  • 如何在canvas、html5中旋转形状?

    我试图用这个旋转一条线 window onload function var canvas document getElementById foo var context canvas getContext 2d context moveT
  • 使用 Mockito 时模拟和监视有什么区别?

    使用 Mockito 间谍的用例是什么 在我看来 每个间谍用例都可以使用 callRealMethod 进行模拟处理 我看到的一个区别是 如果您希望大多数方法调用都是真实的 那么使用模拟与间谍可以节省一些代码行 是这样还是我错过了更大的图景
  • 如何在 MySQL 中使用“WITH”子句?

    我正在将所有 SQL Server 查询转换为 MySQL 并且我的查询已WITH他们都失败了 这是一个例子 WITH t1 AS SELECT article userinfo category FROM question INNER J
  • 遍历 NSData 并抓取块

    有什么方法可以迭代 NSData 以便我可以根据特定的字节模式拆分它 我需要将某些块分解成一个数组以便以后查找 拆分一个NSData在某些分隔符上 您可以使用以下命令搜索分隔符rangeOfData options range 然后使用分割
  • d3.IE 中的选择类型检查

    如何检查给定对象是否是d3选择 下面的代码打印true在 Chrome 和 Firefox 中 但是false在 Internet Explorer 中 console log d3 select document body instanc
  • 正确的安装顺序 VS 2012 Express 和 SQL Server 2012 Express

    在未安装任何 SQL Server 版本的 Win7 64 系统上 我安装了 Visual Studio 2012 for Web 我以为它会给我安装 SQL Server 2012 Express 的选项 但事实并非如此 现在我想在安装完
  • 德塔云平台无法使用FastAPI上传文件

    当我通过运行此代码时uvicorn main app一切正常 但是当我使用 Deta 运行它时 我得到Internal Server Error并且只有GET端点工作 POST一个甚至没有像应该的那样被调用 你能帮我么 提前致谢 impor
  • 本地数据库插入未存储

    这可能是我的一个愚蠢的错误 但我似乎无法理解它 我创建了一个新的空 C Windows 窗体应用程序 我添加了一个数据库 基于数据集 并将文件存储在我的解决方案资源管理器中 我添加了一个表Test带柱Name 我使用添加一条记录new Sq
  • Scala 方法调用中的大括号[重复]

    这个问题在这里已经有答案了 在 Scala 中 我们可以 println 你好 世界 摘自 Scala 编程 一书 这种用花括号代替圆括号的能力的目的 传入一个参数是为了让客户端程序员能够编写函数 大括号之间的文字 这可以使方法调用感觉更像
  • Linux 支持进程的内存隔离吗?

    更详细地说 问题是 没有root权限 一个进程是否可以读取 而不仅仅是写入 另一个进程的内存 例如 通过某种方式读取 proc gcore 或 proc PID mem 我还不确定他们的权限要求 我确实明白虚拟地址是实现的 每个进程都有自己
  • 如何在 ListView 中将图像从 PHP 服务器延迟加载到 Android

    我是 android 新手并正在探索它 我需要在如下所示的列表中动态加载用户图像 用户列表 我使用一张静态图像来显示资源文件夹中的用户图像 该列表是动态的 并且随着我的位置的变化而变化 但仅当我刷新它时 AddObjectToList jF
  • DOM 内容加载后附加的元素中的事件监听器

    我需要听一个 改变 事件
  • D3 区分具有拖动行为的元素的单击和拖动

    我无法成功区分click事件和drag使用 D3 js v3 绑定到两者的元素上的事件 下面代码中的圆圈被分配了拖动行为和click听众 演示在这里 var dragGroup d3 behavior drag on dragstart f