【d3.js入门】d3-drag介绍和实战

关于d3.js绘制的树中g元素的拖动的功能实现 本人在做项目的时候,遇到了需要将d3.js绘制出来的树进行拖动的问题。1.先贴创建该树的源码//该树的结构 var treeData = [ { name: "原问题", description: "", _prototype: "_question", children: [] } ]; // ************** Generate the tr... 阅读详情

效果如图,这次直接上实战。

 

使用d3-drag实现交互式拖拽功能

在数据可视化中,交互是非常重要的一部分,能够使用户与图表进行互动并进行自定义操作。其中之一就是拖拽功能,可以让用户自由地移动元素,改变元素的位置或顺序。在D3.js中,我们可以使用d3-drag来实现这样的交互式拖拽功能。

1. 引入d3-drag库

首先,我们需要在HTML文件中引入d3.js和d3-drag库。可以通过CDN或本地文件的方式引入,如下所示:

2. 创建可拖拽的元素

接下来,我们需要创建一个可拖拽的元素。在这个示例中,我们将创建一个简单的矩形,并添加拖拽功能。首先,在HTML中创建一个SVG容器:

html复制代码<svg id="container" width="400" height="300"></svg>

然后,在JavaScript代码中使用D3.js创建一个矩形元素,并添加拖拽功能:

javascript复制代码// 创建一个SVG容器
const svg = d3.select("#container");

// 创建矩形元素
const rect = svg.append("rect")
    .attr("x", 100)
    .attr("y", 100)
    .attr("width", 50)
    .attr("height", 50)
    .attr("fill", "blue");

// 创建拖拽行为
const drag = d3.drag()
    .on("start", dragStarted)
    .on("drag", dragged)
    .on("end", dragEnded);

// 将拖拽行为应用到矩形元素上
rect.call(drag);

// 拖拽开始时的回调函数
function dragStarted(event, d) {
    d3.select(this).raise().attr("fill", "red");
}

// 拖拽过程中的回调函数
function dragged(event, d) {
    d3.select(this)
        .attr("x", event.x)
        .attr("y", event.y);
}

// 拖拽结束时的回调函数
function dragEnded(event, d) {
    d3.select(this).attr("fill", "blue");
}

在上面的代码中,我们首先使用d3.se

【 D3.js 进阶系列 — 6.0 】 拖拽的应用(Drag) 拖拽(Drag)是交互式中很重要的一种,本文将讲解拖拽的使用方法。 阅读详情

相关推荐

D3.js的v5版本入门教程(第十四章)—— 力导向图

D3.js的v5版本入门教程(第十四章)          这一章我们来绘制一个力导向图,什么叫力导向图,通俗一点将就是有节点和线组成,当鼠标拖拽一个节点时,其他节点都会受到影响(力导向图有多种类型,本章绘制的效果就是这样,其他类型的读者可以自己去试试),还是给读者提个醒,这一章又会有很多新的知识点,请拿出的学习新东西的本领来     为了绘制一个力导向图,我们还是需要以下新的知识点 d3...

数星星等天明的博客 3万+

用 D3.js 画一个手机专利关系图, 看看苹果,三星,微软间的专利纠葛

用 D3.js 画一个手机专利关系图, 看看苹果,三星,微软间的专利纠葛 前言 本文灵感来源于Mike Bostock 的一个 demo 页面 原 demo 基于 D3.js v3 开发, 笔者将其使用 D3.js v5 进行重写, 并改为使用 ES6 语法. 源码: github 在线演示 : demo 效果 可以看到, 上图左上角为图例, 中间为各个手机公司之间的专利...

ssthouse的博客 1871

【 D3.js 进阶系列 — 6.2 】 饼状图的拖拽

本文讲解稍微复杂一些的拖拽应用,即拖拽饼图的各部分。

十二月咖啡馆工作室 7561

【 D3.js 进阶系列 — 2.1 】 力学图的事件 + 顶点的固定

本章讨论在力学图中常用到的事件( Event ),然后对【进阶 - 第 2.0 章】的人物关系图进行改进,使用户能够固定拖拽的对象。

十二月咖啡馆工作室 1万+

数据可视化 D3 力导向图鼠标右击菜单的制作及缩放(zoom)和拖拽(drag)的应用

先展示一波最终效果 最终效果 这段时间再学习D3,力导向图 力导向图(Force-Directed Graph),是绘图的一种算法。在二维或三维空间里配置节点,节点之间用线连接,称为连线。各连线的长度几乎相等,且尽可能不相交。节点和连线都被施加了力的作用,力是根据节点和连线的相对位置计算的。根据力的作用,来计算节点和连线的运动轨迹,并不断降低它们的能量,最终达到一种能量很低的安定状态。 力导...

一只菜鸡 4261

D3.js的V5版本-Vue框架中使用(第九章) ---力导向图

一. Api使用 d3.forceSimulation() ,新建一个力导向图, d3.forceSimulation().force(),添加或者移除一个力 d3.forceSimulation().nodes(),输入是一个数组,然后将这个输入的数组进行一定的数据转换 d3.forceLink.links(),这里输入的也是一个数组(边集),然后对输入的边集进行转换 tick函数,这...

空谷足音的博客 6006

使用d3.js开发力导向图

主图的拖拽与缩放 在调用上面的缩放的时候会调用zoom 的on zoom 方法,并将缩放以及拖拽的距离传给 缩略图,因为缩放会造成 主图的 translate 发生变化 与手动拖拽造成的translate 会有差 所以 要扣除缩放造成的偏移。所有箭头状态的属性,因为箭头和线不是"一体"的,所以当hover 的时候,圆点(dot) 的大小会发生变化,箭头的refX,refY,也会发生变化,甚至 箭头的大小变化 refX 和refY也得改变。在之前的tick 中去改变 path 的d属性 以及 点的 位置。

dhp1994的博客 830

d3 canvas 绘制力导向图

d3 canvas 绘制力导向图 下面是分别使用svg和canvas绘制的效果图 svg绘制的效果图 canvas绘制的效果图 数据量小的时候,使用svg绘制是没什么问题的,但是一旦点和线的数据量一大,就会造成页面卡顿的情况,因此只能使用canvas又重新绘制了一遍,下面是参考了他人写的,进行改进,链接放在最下面了 html <div class="micro-topo-chart"> <canvas id="topo-canvas" class="topo-canvas" w

qq_32862143的博客 1825

别再只会画静态图了!用D3.js v7给你的网络拓扑图加上可拖拽节点和点击跳转

本文详细介绍了如何使用D3.js v7构建交互式网络拓扑图,实现节点拖拽和点击跳转功能。通过力导向布局和事件绑定技术,开发者可以轻松创建动态可视化的网络架构图,提升运维效率和用户体验。文章包含完整代码示例和实战优化技巧,是掌握D3.js高级交互开发的实用指南。

weixin_33730836的博客 400

【 D3.js 进阶系列 — 6.1 】 缩放的应用(Zoom)

缩放(Zoom)是另一种重要的可视化操作,主要是使用鼠标的滚轮进行。

十二月咖啡馆工作室 2万+

D3不是图表库,是数据可视化底层思维训练场

数据可视化本质是将抽象数据映射为可感知视觉信号的过程。其核心原理在于建立数据与DOM元素的动态绑定关系,并通过比例尺、坐标变换、过渡动画等数学与渲染机制实现精准表达。这种底层控制能力,赋予开发者对性能、交互逻辑和渲染确定性的绝对掌控力,成为构建高定制化、实时性、空间复杂型可视化系统的不可替代基础。在前端工程日益依赖封装框架的今天,D3所锤炼的数据驱动思维、DOM生命周期管理能力及内存与事件治理经验,正深度渗透至React/Vue集成、实时大屏、力导向图、地理投影等高频应用场景。本文围绕d3.data绑定、e

weixin_30876945的博客 392

Vue3项目实战:如何用GSTC打造可拖拽的甘特图(附完整代码)

本文详细介绍了如何在Vue3项目中集成GSTC库,从零构建一个功能强大的交互式甘特图。通过实战代码演示了核心配置、数据渲染,并重点讲解了如何利用ItemMovement插件实现任务条的可拖拽与时间调整功能,帮助开发者快速打造响应迅速、体验流畅的项目管理工具。

gg901的博客 861

d3-drag:使用鼠标或触摸输入拖放SVG,HTML或Canvas

d3-拖动 是一种流行且易于学习的指向手势:将指针移至某个对象,按住并抓住它,将对象“拖放”到新位置,然后松开以“放下”。 D3的提供了方便而灵活的抽象,以实现对的拖放交互。 例如,您可以使用d3-drag来促进与交互或碰撞圆的模拟: 您还可以使用d3-drag来实现自定义用户界面元素,例如滑块。 但是拖动行为不仅是为了移动元素。 有多种方式来响应拖动手势。 例如,您可以使用它来套点散点图中的元素,或在画布上绘制线条: 拖动行为可以与其他行为(例如缩放)结合使用。 拖动行为与DOM无关,因此您可以将其与SVG,HTML甚至Canvas一起使用! 您可以使用高级选择技术来扩展它,例如Voronoi叠加层或最接近目标的搜索: 最重要的是,拖动行为会自动统一鼠标和触摸输入,并避免浏览器特质。 当得到更广泛的使用时,拖动行为也将支持这些事件。 正在安装 如果使用NPM,则npm insta

【芯片验证随心记】1.SystemVerilog中,rand和randc的区别?如何用constraint实现randc?

在SystemVerilog里,randc 的“不重复循环”特性是用一个 周期性排列器(permutation engine) 实现的,而这个引擎在 LRM 里并没有公开。我们只能在 “用户空间” 用 rand + constraint 去模仿它的行为。每次随机化只取 queue.pop_front(),用完再洗。在4次随机化内,y会依次出现0,1,2,3各一次(顺序随机)每次随机化,x可能是0-3中的任意值,可能连续多次相同。每次随机化时,在未使用的值里随机挑一个;第5次随机化时,重新生成新的排列周期。

qq_43172512的博客 342

Score Matching(得分匹配)

Score Matching(得分匹配)是一种统计学习方法,用于估计概率密度函数的梯度(即得分函数),而无需知道密度函数的归一化常数。这种方法由Hyvärinen在2005年提出,主要用于无监督学习,特别是在密度估计和生成模型中。

weixin_39699362的博客 2167

人脸关键点定义汇总

前几天看一份代码临时需要找49个人脸关键点位置定义的图片发现怎么百度都搜不到,最后幸好谷歌可以使用了就用谷歌搜到了。所以在这里汇总一下我所知道的人脸关键点的定义和相关的一点东西,以备不时之需。 68个关键点 最常用的工具是Dlib,网址:http://dlib.net/ dlib的68个特征点检测算法是ERT算法【1】 使用dlib检测68个特征点的python示例见:http://dlib.n...

程序媛 7642

CS算法实战:用MATLAB从零实现SAR点目标成像(附完整代码)

本文详细介绍了如何使用MATLAB从零实现SAR点目标CS成像算法,涵盖Chirp Scaling(CS)算法的核心理论、距离徙动校正(RCMC)和方位压缩等关键步骤。通过完整的代码示例和实战技巧,帮助读者掌握SAR成像处理算法,提升遥感图像处理能力。

weixin_29211309的博客 179

OpenClaw 开机自启配置:Windows/macOS/Linux 全平台技术指南

OpenClaw 开机自启全平台配置指南 本文提供了在Windows、macOS和Linux系统上配置OpenClaw开机自启的完整技术方案。主要内容包括: Windows配置:提供三种方法(Windows服务、任务计划程序、启动文件夹),详细说明服务脚本创建、服务注册和测试流程 macOS配置:使用LaunchAgent实现开机自启,包含配置文件创建和加载方法 Linux配置:通过systemd服务实现,包括服务单元文件创建和启用步骤 系统要求:明确硬件(64位CPU/4GB内存)和软件(各平台操作系统版

一键难忘的博客 2993

如何在多 GPU 配置上运行 Unsloth:数据并行或模型并行

当工作负载受限于内存(模型或批次无法放入单张显卡)、或受限于计算且计算与通信比率较高时(即每块 GPU 的额外计算量超过同步参数的开销,如在 DDP 中,或超过传递激活值的开销,如在模型并行中),多 GPU 配置才开始显现优势。在松散连接的显卡上(尤其是 PCIe 版本的 H100 或 A100),额外的设备间数据传输会导致性能显著低于单 GPU 运行。让我们厘清概念,明确说明如何通过模型并行(将模型拆分到多个 GPU)或数据并行(在每个 GPU 上复制模型)来跨多 GPU 运行 Unsloth。

人工智能领域专家 646

机器人控制仿真软件:MATLAB Simulink Control System Toolbox_(1).MATLAB基础知识

MATLAB(Matrix Laboratory)是由MathWorks公司开发的一种高性能数值计算和可视化软件。它广泛应用于科学计算、工程设计、信号处理、控制系统设计、图像处理等领域。强大的矩阵运算能力:MATLAB的核心是矩阵运算,能够高效处理大规模的数值数据。丰富的工具箱:MATLAB提供了大量的工具箱,如Control System Toolbox、Simulink、Signal Processing Toolbox等,这些工具箱覆盖了多个应用领域。易于使用的图形界面。

kkchenjj的博客 904

基于PointNet++网络的点云数据分类仿真分析

局部特征学习模块用于学习点云中每个点的局部特征表示,而全局特征学习模块用于学习整个点云的全局特征表示。点云数据分类是指将点云数据分为不同的类别或标签。PointNet++是一种用于点云数据处理的深度学习网络,它能够有效地学习点云数据的特征表示并实现高精度的分类。在本文中,我们将使用MATLAB实现基于PointNet++网络的点云数据分类仿真分析,并提供相应的源代码。然后,我们使用splitEachLabel函数将数据划分为训练集和测试集,其中80%的数据用于训练,20%的数据用于测试。

HackDashX的博客 210

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: 前端工程师也应该了解的 docker compose
下一篇: 学习Vue3系列-开发滑动图片组件
Cipher_Y
博客等级 码龄3年 93粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值