• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

让Echarts柱状图动起来

武飞扬头像
前端-文龙刚
帮助1

  1.  
    <!DOCTYPE html>
  2.  
    <html lang="en">
  3.  
     
  4.  
    <head>
  5.  
    <meta charset="UTF-8">
  6.  
    <title>Title</title>
  7.  
    <script src="https://d3js.org/d3.v5.min.js"></script>
  8.  
    </head>
  9.  
     
  10.  
    <body>
  11.  
     
  12.  
    <svg width="500" height="400"></svg>
  13.  
     
  14.  
    </body>
  15.  
     
  16.  
    <script>
  17.  
     
  18.  
    var data = [20, 35, 12, 36, 54, 68, 74, 96];
  19.  
    var margin = 30;//svg 上下左右边距
  20.  
     
  21.  
    var svg = d3.select('svg');
  22.  
    var width = svg.attr('width');
  23.  
    var height = svg.attr('height');
  24.  
     
  25.  
    //创建分组
  26.  
    var g = svg.append('g').attr('transform', 'translate(' margin ',' margin ')');
  27.  
     
  28.  
    //定义 x y 轴比例尺
  29.  
    var scaleX = d3.scaleBand()
  30.  
    .domain(d3.range(data.length))
  31.  
    .range([0, width - margin * 2]);
  32.  
    var scaleY = d3.scaleLinear()
  33.  
    .domain([0, d3.max(data)])
  34.  
    .range([height - margin * 2, 0]);
  35.  
     
  36.  
    //绘画 x y 轴
  37.  
    var axisX = d3.axisBottom(scaleX);
  38.  
    var axisY = d3.axisLeft(scaleY);
  39.  
     
  40.  
    g.append('g').attr('transform', 'translate(0,' (height - margin * 2) ')').call(axisX);
  41.  
    g.append('g').attr('transform', 'translate(0,0)').call(axisY);
  42.  
     
  43.  
    // 创建矩形分组
  44.  
    var gs = g.selectAll('rect').data(data).enter().append('g');
  45.  
     
  46.  
     
  47.  
    //绘 柱状图 过度效果
  48.  
    var rectP = 40;//柱状图间距
  49.  
    gs.append('rect')
  50.  
    .attr('x', function (d, i) {
  51.  
    return scaleX(i) rectP / 2;
  52.  
    })
  53.  
    .attr('y', function (d, i) {
  54.  
    // return scaleY(d);
  55.  
    // return 0;//动画的初始状态为0 如果是这样的话 就像下雨的效果 柱状图从上往下生长
  56.  
    //
  57.  
    var min = scaleY.domain()[0];//[0,90]
  58.  
    console.log(min)// 输出 0
  59.  
    return scaleY(min);// scaleY(0) y轴比例尺 映射出来的是最大值; 这个效果 等同于return height - 2*margin;的效果
  60.  
    })
  61.  
    .attr('width', function (d, i) {
  62.  
    return scaleX.step() - rectP;
  63.  
    })
  64.  
    .attr('height', function (d, i) {
  65.  
    // return height - margin*2 - scaleY(d);
  66.  
    return 0;//动画的初始状态为0
  67.  
    })
  68.  
    .attr('fill', 'pink')
  69.  
    .transition()//添加过度
  70.  
    .duration(2000)//动画的持续时间 毫秒
  71.  
    .delay(function (d, i) {//延迟执行
  72.  
    return i * 300;//每个柱子逐渐开始的效果
  73.  
    })
  74.  
    .attr('y', function (d, i) {
  75.  
    return scaleY(d);
  76.  
    })
  77.  
    .attr('height', function (d, i) {
  78.  
    return height - margin * 2 - scaleY(d);
  79.  
    });
  80.  
     
  81.  
     
  82.  
     
  83.  
    //绘 文字 过度效果
  84.  
     
  85.  
    gs.append('text')
  86.  
    .attr('x', function (d, i) {
  87.  
    return scaleX(i) rectP / 2;
  88.  
    })
  89.  
    .attr('y', function (d, i) {
  90.  
    // return scaleY(d);
  91.  
    return height - 2 * margin; //这里的初始化效果 同上面的矩形初始化效果一样
  92.  
    })
  93.  
    .attr('dx', function (d, i) {
  94.  
    return -2;
  95.  
    })
  96.  
    .attr('dy', function (d, i) {
  97.  
    return 20;
  98.  
    })
  99.  
    .text(function (d, i) {
  100.  
    return d;
  101.  
    })
  102.  
    .transition()
  103.  
    .duration(2000)
  104.  
    .delay(function (d, i) {
  105.  
    return i * 300;//300毫秒
  106.  
    })
  107.  
    .attr('y', function (d, i) {
  108.  
    return scaleY(d);
  109.  
    });
  110.  
     
  111.  
     
  112.  
    </script>
  113.  
     
  114.  
    </html>
学新通

效果图

学新通 

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhekigca
系列文章
更多 icon
同类精品
更多 icon
继续加载