首页 > Web开发 > 详细

可视化工具D3.js教程 入门 (第十章)—— 交互式操作

时间:2020-04-02 16:07:15      阅读:63      评论:0      收藏:0      [点我收藏+]

这里所说的交互式操作,就是说的图表的事件监听。

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>

 

效果:鼠标滑过柱状图 颜色变换

技术分享图片

 

可视化工具D3.js教程 入门 (第十章)—— 交互式操作

原文:https://www.cnblogs.com/zhinian-/p/12609024.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!