可视化工具D3.js教程 入门 (第十章)—— 交互式操作
这里所说的交互式操作,就是说的图表的事件监听。
on('eventName',funvtion(){ ... } ) 第一个参数是要监听的事件名称 第二个参数是要执行的函数 跟jquery类似。
下面咱们在上一张的柱状图 基础上 ,给咱们的柱状图增加鼠标移入与移出事件,改变其颜色
代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://d3js.org/d3.v5.min.js"></script> </head> <body> <svg width="500" height="400"></svg> </body> <script> var data = [90,75,12,36,54,88,24,66]; var margin = 30;//svg 上下左右边距 var svg = d3.select('svg'); var width = svg.attr('width'); var height = svg.attr('height'); //创建分组 var g = svg.append('g').attr('transform','translate('+ margin +','+ margin +')'); //定义 x y 轴比例尺 var scaleX = d3.scaleBand() .domain(d3.range(data.length)) .range([0,width - margin*2]); var scaleY = d3.scaleLinear() .domain([0,d3.max(data)]) .range([height - margin*2,0]); //绘画 x y 轴 var axisX = d3.axisBottom(scaleX); var axisY = d3.axisLeft(scaleY); g.append('g').attr('transform','translate(0,'+ (height - margin*2) +')').call(axisX); g.append('g').attr('transform','translate(0,0)').call(axisY); // 创建矩形分组 var gs = g.selectAll('rect').data(data).enter().append('g'); //绘 柱状图 + 过度效果 var rectP = 10;//柱状图间距 gs.append('rect') .attr('x',function (d,i) { return scaleX(i) + rectP/2; }) .attr('y',function (d,i) { return scaleY(d); }) .attr('width',function (d,i) { return scaleX.step() - rectP; }) .attr('height',function (d,i) { return height - margin*2 - scaleY(d); }) .attr('fill','pink') //添加鼠标划入划出事件 .on('mouseover',function () {//鼠标划入矩形事件 d3.select(this)//这里的this指向就是当前的矩形 .transition() .duration(1000) .delay(200) .attr('fill','#306ade'); }) .on('mouseout',function () { d3.select(this) .transition() .duration(1000) .delay(200) .attr('fill','pink'); }) //绘 文字 + 过度效果 gs.append('text') .attr('x',function (d,i) { return scaleX(i) + rectP/2; }) .attr('y',function (d,i) { // return scaleY(d); return height - 2*margin; //这里的初始化效果 同上面的矩形初始化效果一样 }) .attr('dx',function (d,i) { return -2; }) .attr('dy',function (d,i) { return 20; }) .text(function (d,i) { return d; }) .transition() .duration(2000) .delay(function (d,i) { return i*300;//300毫秒 }) .attr('y',function (d,i) { return scaleY(d); }); </script> </html>
效果:鼠标滑过柱状图 颜色变换