【 D3.js 进阶系列 — 2.1 】 力学图的事件 + 顶点的固定
本章讨论在力学图中经常使用到的事件( Event ),然后对【 p=555">进阶 - 第 2.0 章
在【入门 - 第 9.2 章】和【进阶 - 第 2.0 章】中,都用到了下面代码:
force.on("tick", function(){ });
这里的 force 是之前代码中定义的布局( Layout )。tick 表示当运动进行中每更新一帧时。
这是力学图中最常使用的事件,用于设定力学图每一帧是怎样更新的。除此之外,另一些其它经常使用的事件。
1. 布局的事件
代码中,如果定义例如以下的布局:
var force = d3.layout.force()
.size([width,height])
.linkDistance(200)
.charge(-1500);
力学图布局 force 本身的事件,D3 提供了3个,分别为 start 。end,tick。
在写代码时。可形如:
//力学图运动開始时
force.on("start", function(){
console.log("開始");
}); //力学图运动结束时
force.on("end", function(){
console.log("结束");
}); //力学图每一帧
force.on("tick", function(){
console.log("进行中");
});
各事件发生时,就会运行对应的代码。
2. 拖拽的事件
在【入门 - 第 9.2 章】和【进阶 - 第 2.0 章】中,都出现了下面代码:
.call(force.drag);
即设定当拖拽时调用函数 force.drag()。
D3 中提供了3种拖拽事件:dragstart、dragend、drag。
var drag = force.drag()
.on("dragstart",function(d,i){
console.log("拖拽状态:開始");
})
.on("dragend",function(d,i){
console.log("拖拽状态:结束");
})
.on("drag",function(d,i){
console.log("拖拽状态:进行中");
});
上面代码中。分别定义了三种事件后。将此拖拽函数赋值给变量 drag,在调用时,仅仅要使用:
.call(drag);
就可以。
3. 顶点的固定
使用布局转换数据之后。顶点有一个属性 fixed 。
当这个值为 true 时,顶点就是固定不动的;为 false 时。它就是运动的。默认是 false 的。如果要改进【进阶 - 第 2.0 章】的代码。使得用户可以随意固定和解锁顶点,可加入代码例如以下:当拖拽開始时。被拖拽顶点设定为固定的:
var drag = force.drag()
.on("dragstart",function(d,i){
d.fixed = true; //拖拽開始后设定被拖拽对象为固定
label_text_2.text("拖拽状态:開始");
})
当鼠标双击顶点时,对顶点解锁:
nodes_img.on("dblclick",function(d,i){
d.fixed = false;
})
4. 结果
在左上角加入了标签文字,请好好体会一下各事件发生的状况。
拖拽后顶点会固定,双击顶点可以解锁。
完整代码请点击下面链接,右键选择“查看网页源码”:
http://www.ourd3js.com/demo/J-2.1/relationforce.html
谢谢阅读。
文档信息
- 版权声明:署名(BY)-非商业性(NC)-禁止演绎(ND)
- 发表日期:2014年11月08日
- 很多其它内容:OUR D3.JS - 数据可视化专题站 和 CSDN个人博客
- 备注:转载请注明出处,谢谢
【 D3.js 进阶系列 — 2.1 】 力学图的事件 + 顶点的固定的更多相关文章
- 【 D3.js 进阶系列 】 进阶总结
进阶系列的文章从去年10月开始写的,晃眼又是4个多月了,想在年前总结一下. 首先恭祝大家新年快乐.今年是羊年吧.前段时间和朋友聊天,聊到十二生肖里为什么没猫,我张口就道:不是因为十二生肖开会的时候猫迟 ...
- 【 D3.js 进阶系列 — 4.0 】 绘制箭头
转自:http://www.ourd3js.com/wordpress/?p=660 [ D3.js 进阶系列 — 4.0 ] 绘制箭头 发表于2014/12/08 在 SVG 绘制区域中作图,在绘制 ...
- 【 D3.js 进阶系列 — 2.2 】 力学图的參数
力学图的布局中有非常多參数.本文将逐个说明. D3 中的力学图布局是使用韦尔莱积分法计算的.这是一种用于求解牛顿运动方程的数值方法,被广泛应用于分子动力学模拟以及视频游戏中. 定义布局的代码例如以下: ...
- 【 D3.js 进阶系列 — 6.2 】 饼状图的拖拽
本文讲解稍微复杂一些的拖拽应用,即拖拽饼图的各部分. 在[入门 - 第 9.1 章]讲解了如何制作饼状图.饼状图的各部分是用具有宽度的弧线来表示的.在与用户进行交互的时候,如果每一部分都能拖拽,是很有 ...
- 【 D3.js 进阶系列 — 1.1 】 其它表格文件的读取
CSV 表格文件是以逗号作为单元分隔符的,其他还有以制表符 Tab 作为单元分隔符的 TSV 文件,还有人为定义的其他分隔符的表格文件.本文将说明在 D3 中怎样读取它们. 1. TSV 表格文件是什 ...
- 【 D3.js 进阶系列 — 1.2 】 读取 CSV 文件时乱码的解决方法
在 D3 中使用 d3.csv 读取 CSV 文件时,有时会出现乱码问题. 怎么解决呢? 1. 乱码问题 使用 d3.csv 读取 xxx.csv 文件时.假设 xxx.csv 文件使用的是 UTF- ...
- 【 D3.js 进阶系列 — 6.1 】 缩放的应用(Zoom)
缩放(Zoom)是另一种重要的可视化操作,主要是使用鼠标的滚轮进行. 1. zoom 的定义 缩放是由 d3.behavior.zoom() 定义的. var zoom = d3.behavior.z ...
- 【 D3.js 进阶系列 — 5.0 】 直方图
直方图用于描写叙述概率分布,D3 提供了直方图的布局 Histogram 用于转换数据. 假设有数组 a = [10, 11, 11.5, 12.5, 13, 15, 19, 20 ],如今把10~2 ...
- 【 D3.js 进阶系列 — 1.0 】 CSV 表格文件的读取
在入门系列的教程中.我们经常使用 d3.json() 函数来读取 json 格式的文件.json 格式非常强大.但对于普通用户可能不太适合,普通用户更喜欢的是用 Microsoft Excel 或 O ...
随机推荐
- 勾股数组及其应用uva106
勾股数组 设三元组(a,b,c)满足a^2 + b^2 = c^2的勾股数组,那么是否存在无穷多个勾股数组呢, 答案是肯定的,将三元组乘以d,可以得到新的三元组(da,db,dc) 即(da)^2 + ...
- erlang集群IP及port管理
erlang集群是依靠epmd维护的,epmd是erlang集群节点间port映射的守护进程.负责维护集群内的节点连接.提供节点名称到IP地址及port的解析服务. epmd 自己定义port号 ep ...
- POJ1502(Dijkstra)
MPI Maelstrom Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5538 Accepted: 3451 题目链 ...
- python战斗2:看到一个页面编码
编程环境:虚拟linux (windows 下 cygwin) 识别网页编码. usage: python coding http://www.***.com 測试结果: watermark/2/te ...
- 【牛腩新闻公布系统】WebForms UnobtrusiveValidationMode 须要“jquery”ScriptResourceMapping。
问题: WebForms UnobtrusiveValidationMode须要"jquery"ScriptResourceMapping. 请加入一个名jquery ...
- Linux 下卸载MySQL 5
对于在Linux下通过rpm方式的mysql,我们能够通过移除这些rpm包以及删除项目的文件夹来达到卸载的目的.本文演示了在SUSE Linux 10下下载MySQL 5.5.37.详细见下文. 1. ...
- 【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握
内容简介 1.第二部分第二课:命令行,世界尽在掌握 2.第二部分第三课预告:文件和目录,组织不会亏待你 命令行,世界尽在掌握 今天的标题是不是有点霸气侧漏呢? 读者:“小编,你为什么每次都要起这么非主 ...
- 认识Require
1. 加载require.js文件 <script type="text/javascript" src="js/require.js" data-mai ...
- ZeroMQ注意事项
Request-Reply状态 供client它必须是严肃的格在根据第一呼叫zmq_send() 函数,然后调用zmq_recv()函数的顺序来运行 对于server来说,运行时序相反 假设不依照这个 ...
- 低压电力采集平台DW710C与PC沟通
集电极485接口RS-485与RS-232转换模块485端相连.RS-485与RS-232转换模块232通过串行电缆末端PC的232串口.我们通过书面沟通PC通信软件来实现双方并执行收购方案. 1)上 ...