selection.on:事件监听操作符

on()操作符可以添加移除选择集中每个 DOM元素的事件监听函数:

  1. selection.on(type[,listener[,capture]])

参数type是一个DOM事件类型字符串,指明要监听的事件,如: "click"、 "mouseover"、 "submit"等,可以使用浏览器支持的任何事件类型。

参数capture是可选的,对应于W3C的useCapture标志。

获取/移除当前监听函数

参数listener是可选的,如果未指定该参数,则on()调用返回 type类型的当前监听函数。

移除一个事件监听,将listener参数置为null即可。

为事件注册监听函数

参数listener是一个监听函数,当d3捕捉到DOM事件后,将调用该监听函数, 并忽略该函数的返回值。监听函数也是一个访问器,d3触发监听函数时, 将this指向当前的DOM对象,并以参数形式传入其对应的数据和在选择集中的序号。

注册多个监听函数

如果在同一个DOM对象上已经注册有type类型的监听函数,那么再次调用on() 进行注册将移除之前注册的监听函数。如果需要对一种事件注册多个监听函数,可以在 事件类型名称后增加一个可选的命名空间,比如:"click.foo"、"click.bar"。

d3.event:DOM事件对象

你可能已经注意到,d3的事件监听函数在触发时,传入的参数中没有DOM事件对象。 这样设计的出发点是让监听函数可以和其他访问器函数一样,能够获得DOM对象对应 的数据和序号。

但是,在很多应用场景下,我们还是需要DOM事件对象,比如:

  • 当鼠标点击时,我们需要它的xy坐标,或者判断用户点击的是左键还是右键;
  • 或者,当用户敲击键盘时,我们需要
  • 或者,我们需要调用DOM事件对象的preventDefault()来禁止浏览器对某个事件的默认行为;
  • 或者,我们需要调用stopPropagation()来阻止事件的冒泡行为......

d3使用一个全局变量来提供DOM事件对象:d3.event

d3.event在监听函数中有效。每当事件触发时,d3就将DOM事件对象赋给d3.event, 并在监听器处理完之后将其清理。

d3.event就是你熟悉的Event对象,所以,随便用。

d3.mouse:获得鼠标事件位置

尽管可以使用DOM事件对象的pageX和pageY获得鼠标位置,d3提供了更好用的方法:

  1. d3.mouse(container)

参数container表示一个HTML元素,d3.mouse()将返回鼠标位置相对于 这个容器元素的x、y坐标。

这意味着对同一个鼠标事件,我们只要传入不同的容器元素,就可以获得鼠标位置 不同的相对位置!

解脱了很多令人烦躁的计算过程,对吧?

参考资料:http://***/course/54fd40cfe564e50d50dcf284/

d3.js:数据可视化利器之 交互行为:响应DOM事件的更多相关文章

  1. d3.js:数据可视化利器之快速入门

    hello,data! 在进入d3.js之前,我们先用一个小例子回顾一下将数据可视化的基本流程. 任务 用横向柱状图来直观显示以下数据: var data = [10,15,23,78,57,29,3 ...

  2. d3.js:数据可视化利器之 修改文档:DOM操作符

    style: CSS样式操作符 style()操作符用来设置或获取选择集中各DOM元素的CSS样式: selection.style(name[,value[,priority]]) style()操 ...

  3. [资料搜集狂]D3.js数据可视化开发库

    偶然看到一个强大的D3.js,存档之. D3.js 是近年来十分流行的一个数据可视化开发库. 采用BSD协议 源码:https://github.com/mbostock/d3 官网:http://d ...

  4. d3.js:数据可视化利器之 selection:选择集

    选择集/selection 选择集/selection是d3中的核心对象,用来封装一组从当前HTML文档中选中的元素: d3提供了两个方法用来创建selection对象: select(selecto ...

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

    本章讨论在力学图中经常使用到的事件( Event ),然后对[p=555">进阶 - 第 2.0 章]的人物关系图进行改进.使用户可以固定拖拽的对象. 在[入门 - 第 9.2 章]和 ...

  6. 【python可视化系列】python数据可视化利器--pyecharts

    学可视化就跟学弹吉他一样,刚开始你会觉得自己弹出来的是噪音,也就有了在使用python可视化的时候,总说,我擦,为啥别人画的图那么溜: [python可视化系列]python数据可视化利器--pyec ...

  7. MOOC课程信息D3.js动态可视化

    版权声明:本文为博主原创文章,转载 请注明出处:https://blog.csdn.net/sc2079/article/details/83153693 - 写在前面 好久没更新博客了,主要还是最近 ...

  8. 数据可视化利器pyechart和matplotlib比较

    python中用作数据可视化的工具有多种,其中matplotlib最为基础.故在工具选择上,图形美观之外,操作方便即上乘. 本文着重说明常见图表用基础版matplotlib和改良版pyecharts作 ...

  9. Python数据可视化利器Matplotlib,绘图入门篇,Pyplot介绍

    Pyplot matplotlib.pyplot是一个命令型函数集合,它可以让我们像使用MATLAB一样使用matplotlib.pyplot中的每一个函数都会对画布图像作出相应的改变,如创建画布.在 ...

随机推荐

  1. Makefile 9——为依赖关系文件建立依赖关系

    现在我们再对complicated项目做一些更改,增加程序文件间依赖关系的复杂度. /× main.c ×/ #include"foo.h" int main(void) { fo ...

  2. dp之完全背包poj2063

    题意:求投资k年获得最大投资,每年都选最大利息的方案进行投资k年后就可以得到最多的人民币. 注意:每一年收到的利息都可以作为下一年的本金......其实从测试数据来看,是很好看出来的...... 思路 ...

  3. Psql 安装问题

    在openerp安装过程中报错: psql: could not connect to server: No such file or directory Is the server running ...

  4. socket相关函数中断后重试

    慢系统调用accept,read,write被信号中断时应该重试.对于accept,如果errno为ECONNABORTED,也应该重试. connect虽然也会阻塞,但被信号中断时不能立即重试,该s ...

  5. Btrace的使用方法

    本文基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版> 写在前面: Btrace有很多用法,比如说性能监视,连接泄露,内存泄漏,多线程竞争,而本文说的只是最基本的应用打印调用 ...

  6. Go语言中字符串的查找方法小结

    这篇文章主要介绍了Go语言中字符串的查找方法小结,示例的main函数都是导入strings包然后使用其中的方法,需要的朋友可以参考下   1.func Contains(s, substr strin ...

  7. contract

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  8. 《精通CSS》读书笔记(一)

    最近新添16本书,目前开始看陈剑瓯翻译的<精通CSS——高级Web标准解决方案>(Andy Budd, CSS Mastery -- Advanced Web Standards Solu ...

  9. UML概述

    UML (Unified Modeling Language)统一建模语言,是描述.构造和文档化系统制品的可视化语言,是一种图形表示法. UML用途:UML是一种工具,主要用在我们对软件用面向对象的方 ...

  10. Android实现时间轴

    昨天群里有讨论时间轴的项目,没有接触过,以为非常吊,研究之后才知道表面都是忽悠人的,使用listview就能实现了,也没有什么新奇的东西 废话少说,直接上图 图片和文字都能够私人订制 没什么好说的,直 ...