零基础自学前端 D3.js 初体验03 柱状图+排序

零基础自学前端 D3.js 初体验03 柱状图+排序

<!DOCTYPE html>

<html>


<head>

  <meta charset="utf-8">

  <title>d3</title>

</head>

<script src="https://d3js.org/d3.v4.min.js"></script>


<body>


  <button type="button" name="button" οnclick="mySort()">排序</button>

  <button type="button" name="button" οnclick="myAdd()">添加数据</button>

</body>

<script type="text/javascript">

  var width = 1000,

    height = 400,

    dataset = [50, 90, 124, 86, 73, 64, 110, 107],

    padding = {

      top: 20,

      right: 20,

      bottom: 20,

      left: 20

    },

    rectWidth = 30,

    rectStep = 35;

  var svg = d3.select("body")

    .append("svg")

    .attr("width", width)

    .attr("height", height)


  var rect = svg.selectAll("rect")

    .data(dataset)

    .enter()

    .append("rect")

    .attr("fill", "red")

    .attr("x", function(d, i) {

      return padding.left + i * rectStep;

    })

    .attr("y", function(d) {

      return height - padding.bottom - d;

    })

    .attr("width", rectWidth)

    .attr("height", function(d) {

      return d;

    });


  var text = svg.selectAll("text")

    .data(dataset)

    .enter()

    .append("text")

    .attr("fill", "aqua")

    .attr("font-size", "14px")

    .attr("text-anchor", "middle")

    .attr("x", function(d, i) {

      return padding.left + i * rectStep;

    })

    .attr("y", function(d) {

      return height - padding.bottom - d

    })

    .attr("dx", rectWidth / 2)

    .attr("dy", "1em")

    .text(function(d) {

      return d;

    });


  function draw() {

    var updateRect = svg.selectAll("rect")

      .data(dataset);

    var enterRect = updateRect.enter();

    var exitRect = updateRect.exit();


    var updateText = svg.selectAll("text")

      .data(dataset);

    var enterText = updateText.enter();

    var exitText = updateText.exit();


    updateRect.attr("fill", "red")

      .attr("x", function(d, i) {

        return padding.left + i * rectStep;

      })

      .attr("y", function(d) {

        return height - padding.bottom - d;

      })

      .attr("width", rectWidth)

      .attr("height", function(d) {

        return d;

      });

    enterRect.append("rect")

      .attr("fill", "red")

      .attr("x", function(d, i) {

        return padding.left + i * rectStep;

      })

      .attr("y", function(d) {

        return height - padding.bottom - d;

      })

      .attr("width", rectWidth)

      .attr("height", function(d) {

        return d;

      });

    exitRect.remove();


    updateText.attr("fill", "aqua")

      .attr("font-size", "14px")

      .attr("text-anchor", "middle")

      .attr("x", function(d, i) {

        return padding.left + i * rectStep;

      })

      .attr("y", function(d) {

        return height - padding.bottom - d

      })

      .attr("dx", rectWidth / 2)

      .attr("dy", "1em")

      .text(function(d) {

        return d;

      });

    enterText.append("text")

      .attr("fill", "aqua")

      .attr("font-size", "14px")

      .attr("text-anchor", "middle")

      .attr("x", function(d, i) {

        return padding.left + i * rectStep;

      })

      .attr("y", function(d) {

        return height - padding.bottom - d

      })

      .attr("dx", rectWidth / 2)

      .attr("dy", "1em")

      .text(function(d) {

        return d;

      });

    exitRect.remove();

  }


  function mySort() {

    dataset.sort(d3.ascending);

    draw();

  }


  function myAdd() {

    dataset.push(Math.floor(Math.random() * 100));

    draw();


  }

</script>


</html>


零基础自学前端,你要的学习资料到了-web前端交流学习群018


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值