【D3.js 学习总结】21、D3交互事件

前20节中,我们讲了各种静态D3图表的制作,好的图表应该是要与用户进行互动的,这节来讲讲D3的交互事件;

d3.event

selection选择器事件监听的写法跟平时我们用的jQuery类似,如:

selection.on(‘click’,function(d,i){

alert(‘ok’);

})

但请注意,点击事件触发的匿名函数参数不是我们常用的e或event,而是绑定在选择器上的数据d和数据的序列号i,这点非常重要。

注册事件

我们只要调用全局对象d3.event,它是DOM事件,并实现了标准事件字段,像时间戳timeStamp和键代码keyCode,以及preventDefault()方法和的stopPropagation()方法。当然你可以使用原生事件的pageX and pageY;

在后面的在线示例中我们是这样使用d3.event的

      mouseenter: function(d,i) {
        var e = d3.event;
        var t = d3.select(this)
        t.attr('fill','#000');
        text1.text('当前圆半径:'+ d.r +'px');
      }

注意:通过直接调用d.r可以取到当前选择器上绑定的半径数据;

给选择的元素重复注册事件监听,新的事件被替换之前注册的事件。为注册多个监听器,可以跟一个可选的命名空间,如“click.foo”和“click.bar”。

注销事件

要删除事件监听器,只需要传递null给listener,如示例中的如下代码:

      click: function(d,i) {
        var t = d3.select(this);
        t.on('click',null).remove();
      }

d3.mouse(container)

通过使用全局方法d3.mouse可以方便的获取到当前事件对象的x/y坐标值,container为原生DOM对象;

d3.behavior.drag

拖动行为,通过监听拖拽事件控制SVG的交互行为,以下代码出自最后面的示例;

  // 创建拖动行为
  var drag = d3.behavior.drag()
    .on("drag", function(d,i) {
      // 监听拖拽事件
      var e = d3.event;
      var t = d3.select(this)
      t.attr({
        cx: e.x,
        cy: e.y
      });
    });
  circle1.call(drag);

d3.behavior.zoom

缩放行为,通过监听缩放事件控制SVG的交互行为,以下代码出自最后面的示例;

  // 创建缩放行为
  var zoom = d3.behavior.zoom()
    .on("zoom", function(){
      // 监听缩放事件
      circle2.attr('transform',"translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
    });
   circle2.call(zoom)

查看在线演示

时间: 2024-08-18 04:15:48

【D3.js 学习总结】21、D3交互事件的相关文章

【D3.js 学习总结】26、D3地理地图

d3.geo 在学习D3如何制作地图前,我们需要了解下地图的数据格式geoJSON,GeoJSON是一种对各种地理数据结构进行编码的格式,基于Javascript对象表示法的地理空间信息数据交换格式. 本节我们将制作一幅中国地图,使用到的地图数据文件是从 Natural Earth 上的获取,经过提取后制作而成的,在本节入门篇中不细述地图数据的获取过程,将直接使用已经做好的数据,可通过以下链接下载查看中国地图数据. China GeoJSON 1.加载数据 d3.json('geoChina.j

【D3.js 学习总结】4、D3 创建SVG

D3图表大都是由SVG来实现的,所以在继续学习前需要了解一些SVG的知识,可以通过看svg教程来学习一下. D3可以生成一般的SVG形状,它也内置了很多SVG图表,方便我们直接生成实用的图表. 我们先来创建一个SVG容器,其它SVG图形都需要在容器里来创建: var body = d3.select('body'); var svg = body.append('svg').attr('width',200).attr('height',200); 普通SVG 用D3来生成一般的SVG图形,可以

【D3.js 学习总结】1、初识D3

D3是指数据驱动文档(Data-Driven Documents),根据D3的官方定义: D3.js是一个JavaScript库,它可以通过数据来操作文档.D3可以通过使用HTML.SVG和CSS把数据鲜活形象地展现出来.D3严格遵循Web标准,因而可以让你的程序轻松兼容现代主流浏览器并避免对特定框架的依赖.同时,它提供了强大的可视化组件,可以让使用者以数据驱动的方式去操作DOM.----D3维基(2013年8月) 从一个Hello Wordld示例来看看d3如何运行 点击查看在线DEMO fu

【D3.js 学习总结】5、D3 SVG图表示例

之前有说到"D3制作图表的过程就是将各种SVG图形拼接在一起的过程",具体来说折线图表就是折线图+坐标轴的组合,面积图是折线图+坐标轴+面积图 一个完整的SVG图表,是包含了各种数据.SVG图形.样式.交互组成的组合体,我们以面积图表来做一个示例展示: CSS svg{ font-size: 12px; } .line{ fill:none; stroke-width:1; stroke:#000; } .axis line{ stroke: #000; stroke-width: 1

【D3.js 学习总结】10、D3布局-力学图

d3.layout.force() 力学图(也称为导向图,也有叫网络拓补图的,反正就是通过排斥得到关系远近的结构)在社交网络研究.信息传播途径等群体关系研究中应用非常广泛,它可以直观地反映群体与群体之间联系的渠道.交集多少,群体内部成员的联系强度等. 力学(Force)的API说明 force.on - 监听布局位置的变化.(仅支持"start","step","end"三种事件) force.nodes - 获得或设置布局中的节点(node)阵

【D3.js 学习总结】2、D3数据绑定

我们从Hello World示例代码来看D3如何做数据绑定 var demo = d3.select('body') .selectAll('p') .data(data, function (d) { return d; }); 这段代码执行了以下步骤: 1.通过 d3.select('body') 将页面上的body标签选中:2.selectAll('p') 返回了一个p标签的空选集(selection):3.空选集通过 data() 方法将数据和p标签绑定,并产生三个虚拟的子集: ente

【D3.js 学习总结】14、D3布局-打包图

d3.layout.pack() 打包图用于表示包含与被包含的关系,也可表示各对象的权重,通常用一圆套一圆来表示前者,用圆的大小来表示后者. 打包图(Pack)的API说明 pack.children - 取得或设置子节点的访问器. pack.links - 计算树节点中的父子链接. pack.nodes - 计算包布局并返回节点数组. pack.padding - 指定布局间距(以像素为单位) pack.radius - 指定节点半径(不是由值派生来的) pack.size - 指定布局尺寸.

【D3.js 学习总结】11、D3布局-弦图

d3.layout.chord() 弦图是一种用于描述节点之间联系的图表. 弦图(Chord)的API说明 chord.chords - 取回计算的弦角度. chord.groups - 取回计算的分组角度. chord.matrix - 取得或设置布局需要的矩阵数据. chord.padding - 取得或设置弦片段间的角填充. chord.sortChords - 取得或设置用于弦的比较器(Z轴顺序). chord.sortGroups - 取得或设置用于分组的比较器. chord.sort

【D3.js 学习总结】8、D3布局介绍

布局是 D3 中一个十分重要的概念,可以理解成 "制作常见图形的函数",有了它制作各种相对复杂的图表就方便多了. D3 与其它很多可视化工具不同,相对来说较底层,对初学者来说不太方便,但是一旦掌握了,就比其他工具更加得心应手. 下图展示了 D3 与其它可视化工具的区别: 布局的作用是:将不适合用于绘图的数据转换成了适合用于绘图的数据. D3 总共提供了 12 个布局: 饼状图(Pie) 力导向图(Force) 弦图(Chord) 捆图(Bundle) 直方图(Histogram) 堆栈