【 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 ...
随机推荐
- POJ1502(Dijkstra)
MPI Maelstrom Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5538 Accepted: 3451 题目链 ...
- go - 内置基础类型
Go 语言中包括以下内置基础类型: 布尔型:bool 整型:int int64 int32 int16 int8 uint8(byte) uint16 uint32 uint64 uint 浮点型:f ...
- Eclipse+Maven创建webapp项目<一> (转)
Eclipse+Maven创建webapp项目<一> 1.开启eclipse,右键new——>other,如下图找到maven project 2.选择maven project,显 ...
- hdu1372 dfs搜索之国际象棋的马
原题地址 题意 一个8x8的国际象棋棋盘,你有一个棋子"马".算出棋子"马"从某一格到还有一格子的最少步数. 与普通dfs不同的是,你能走的路线不是上下左右,四 ...
- python常用类型的内置函数列表
1.list.append(obj) 向列表中加入一个对象obj fruits = ['apple', 'pear', 'orange'] >>> fruits.ap ...
- jQuery来源学习笔记:整体结构
1.1.由于调用一个匿名函数: (function( window, undefined ) { // jquery code })(window); 这是一个自调用匿名函数,第一个括号内是一个匿名函 ...
- 2014在辛星Javascript口译科
***************概要*************** 1.Javascript是一种原型化继承的基于对象的动态类型的脚本语言,它区分大写和小写.主要执行在client,用户即使响应用户的操 ...
- ORACLE触发特定的解释
ORACLE PL/SQL编程八: 把触发器说透 本篇主要内容例如以下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 ...
- 深入理解spring中的各种注解(转)
Spring中的注解大概可以分为两大类: 1)spring的bean容器相关的注解,或者说bean工厂相关的注解: 2)springmvc相关的注解. spring的bean容器相关的注解,先后有:@ ...
- MySQL各种日期类型与整型(转)
日期类型 存储空间 日期格式 日期范围 datetime 8 bytes YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 t ...