d3.js学习笔记-07(交互)

12 篇文章 1 订阅
9 篇文章 2 订阅

d3.js学习笔记-07

1 交互基础

与图表进行交互,图形元素上设置一个或者多个监听器,当事件发生时,做出相应的反应。

1.1 鼠标的事件

  • click:鼠标单击某元素。
  • mouseover:光标放在某元素上。
  • mouseout:光标从某元素上移出来时。
  • mousemove:鼠标被移动的时候。
  • mousedown:鼠标按钮被按下。
  • mouseup:鼠标按钮被松开。
  • dblclick:鼠标双击。
var rect =svg.selectAll(" rect")
			//绑定数据
			.data(dataset)
			//获取enter部分
			.enter()
			.append("rect")//添加rect元素,使其与绑定数组的长度一致
			.attr("fi11""steelblue") //设置颤色为steelblue
			//设置矩形的x坐标
			.attr("x",function(d,i,i
				return padding.left + xScale(i);
			})
			.attr("y",function (d){//设置矩形的y坐标
				return height- padding.bottom - yscale(d);
			})
			.attr("width",xScale.rangeBand()) //设置矩形的宽度
			.attr("height".function(d){
				//设置矩形的高度
				return yscale(d);
			})
			.on("mouseover" ,function(d,i){
				d3.select(this).attr("fi11","yellow"); //当鼠标移到元素上时,元素为黄色						
			})
			.on("mouseout",function (d,i){
				d3.select(this)//当鼠标移到元素上时,元素过渡到原来的颜色
					.transition()
					.duration(500)
					.attr("fill","steelblue");
			});

1.2 键盘的事件

  • keydown:当用户按下任意键时触发,按住不放会重复触发此事件。该事件不区分字母的大小写。
  • keypress:当用户按下字符键(大小写字母、数字、加号、等号、回车等)时触发,按住不放会重复触发此事件。该事件区分字母的大小写。
  • keyup:当用户释放键时触发,不区分字母的大小写。
    example:键盘的监听事件添加到body中
d3.select("body")
	.on("keydown",function()
	//keydown事件的监听器
	rects.attr("fi1l",function (d){
		if(d == String.fromCharCode(d3.event.keyCode)){
			//如果所按下的键与此rect元素上绑定的数据相同,则返回黄色
			return "yellow":
		}else{
			//否则返回黑色
			return "black";
		}
	});
	.on ("keyup" , funetion({
	//keyup事件的监听器
		rects.attr("fi11","black")});

1.3 触屏

  • touchstart:触摸点被放在触摸屏上时。
  • touchmove:触摸点在触摸屏上移动时。
  • touchend:触摸点从触摸屏上拿开时。
var circle = svg.append ("circle")
	.attr("cx", 150)
	.attr("y", 200)
	.attr("r", 50)
	.attr("fi11", "blue")
	//touchstart事件的监听器
	.on("touchstart", function(){
		d3.select (this).attr("fi11","yellow"); // 开始触摸时,圆变为黄色
	})
	//touchmove事件的监听器
	.on("touchmove", function(){
		var pos = d3.touches(this)[O];  //获取第一个触摸点
		d3.select(this).attr("cx",pos[0]) // 更改圆心坐标实现拖动
						.attr("cy",pos[1]);  
	))
	//touchend事件的监听器
	.on("touchend", function(){
		d3.select(this).attr("fill","blue");  // 触摸结束时颜色变为蓝色
	});

2 事件

任何事件发生时,都会存储在d3.event中。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 行为

3.1 拖拽

使用鼠标/触屏将元素从一个位置移到另一个位置
  • d3.behavior.drag():创建一个拖曳行为。
  • drag.on(type[.listener]):设定事件的监听器。type是事件类型:dragstart、drag、dragend。它们分别表示拖曳开始时、拖曳中、拖曳结束时。listener是监听器的函数,如果省略该参数,则返回当前指定事件的监听器。
  • drag.origin([origin]):设定拖曳的起点。此函数可使鼠标与被平移元素以相对不变的偏移量移动。如果设定了起点,此函数会在mousedown事件发生时被调用,d3.event的初始坐标就是此起点坐标。该函数的返回值是一个对象,对象里包含x和y属性。
svg.selectAll("cirele"y
	.data(cireles)  // 绑定数据
	.enter()
	.append("circle")
	.attr("cx",function(d){ return d.cx;})
	.attr("cy", function(d){ return d.ey;})
	.attr("r".function(d){return d.r;})
	.attr("fi11", "b1ack" )
	.call(drag);  //调用drag函数,drag为参数
	
//创建一个拖曳行为
var drag = d3.behavior.drag()
			.origin(function(d,i){  //设置起点坐标
				return {x:d.cx, y:d.cy} //起点坐标为被拖动物体的圆心坐标
			})
			.on("dragstart", function(a){ //dragstart的监听器
				console.log("拖曳开始");
			})
			.on("dragend", function(d){  //dragend的监听器
				console.log("搁曳结束");
			})
			.on("drag", function(d){
				d3.select(this)//选择当前被拖曳的元素
				// 将d3.event.x赋值给被绑定的数据,再将cx属性设置为该值
				.attr("cx", d.cx = d3.event.x )
				//将d3.event.y赋值给被绑定的数据,再将cy属性设置为该值
				.attr("cy". d.cy -d3.event.y );
			});

在这里插入图片描述

3.2 缩放

  • d3.behavior.zoom():创建一个缩放行为。
  • zoom(selection):应用此行为到选择集selection。
  • zoom.translate([translate]):设定当前的缩放平移向量,默认为[0,0]。如果省略,则返回当前的平移向量。
  • zoom.scale([scale]):设定初始缩放量,默认为1。如果省略,则返回当前的缩放量。
  • zoom.scaleExtent([extent]):设定放大(缩小)的最小值和最大值,默认为[0,无穷大]。
  • zoom.center([center]):设定缩放的中心,默认为鼠标当前位置。
  • zoom.x([x]):设定一个x方向的比例尺,该比例尺会随着放大缩小自动改变其定义域
  • zoom.y([y]):设定一个y方向的比例尺,该比例尺会随着放大缩小自动改变其定义域。
  • zoom.on(type,listener):设置事件类型和监听器。事件类型有三种:zoomstart、zoom、zoomend,分别表示缩放开始时、缩放中、缩放结束时。
var g=svg.append("g")
	.call(zoom);   // 为元素g添加缩放行为, 而不是添加在特定的圆上
g.selectAll("circle")
	.data(circles)
	.enter()
	.append("circle")
	.attr("cx", function(d){ return d.cx;})
	.attr("cy", function(d){ return d.cy;})
	.attr("r",function(d){ return d.r; })
	.attr("fi11", "black");

var zoom = d3.behavior.zoom()   //创建一个缩放行为
			.scaleExtent(1, 10)   //设置缩放的范围
			.on("zoom", function(d){
				d3.select(this).attr("transform", "translate(" +d3.event.translate + ")" + "scale(" +d3 .event.scale +")") // transition(x, y)平移; scale(s)缩放
			});

References

[1] 吕之华.精通D3.js:交互式数据可视化高级编程[M].北京:电子工业出版社,2015∶174-190.

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值