• d3.js--04(enter和exit)


    enter()

    当DOM数量少于data的数量,或者压根一个都没有的时候,我们一般会希望让程序帮忙创建。

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>柱状图</title>
     6 </head>
     7 <body>
     8 
     9 <svg>
    10     <rect></rect>
    11     <rect></rect>
    12 </svg>
    13 <script src="d3.js"></script>
    14 <script>
    15 
    16     var dataset = [250, 210, 170, 130, 90];  //数据(表示矩形的宽度)
    17     var rectHight = 25;
    18     var svg = d3.select('svg');
    19     svg.attr('width', 300)
    20         .attr('height', 300)
    21         .attr('fill', 'red');
    22     var rect = svg.selectAll('rect');
    23 
    24     //绑定数据后,分别获取update和enter部分
    25     var update = rect.data(dataset);
    26     var enter = update.enter();
    27 
    28     //update部分的处理方法是直接修改内容
    29 
    30     update.attr('x', 20)
    31         .attr('y', function (d, i) {
    32             return i * rectHight;
    33         })
    34         .attr('width', function (d) {
    35             return d;
    36         })
    37         .attr('height', rectHight - 2);
    38 
    39     //enter部分的处理方法是添加元素后再修改内容
    40     enter.append('rect')
    41         .attr('x', 20)
    42         .attr('y', function (d, i) {
    43             return i * rectHight;
    44         })
    45         .attr('width', function (d) {
    46             return d;
    47         })
    48         .attr('height', rectHight - 2);
    49 
    50 
    51 </script>
    52 
    53 
    54 </body>
    55 </html>

    通常,从服务器读取文件后,数据是有的,但是网页中是没有元素的。这是D3一个很重要的特性,即可以选择一个空集,然后使用enter().append()的形式来插入元素。假设现在body里没有p元素,请看如下代码

    1 var dataset = [10,20,30,40,50]; 
    2 var body = d3.select("body"); 
    3 body.selectAll("p") //选择body中所有p,但由于没有p,所以选择了一个空集 
    4  .data(dataset)  //绑定dataset数组 
    5  .enter()   //返回enter部分 
    6  .append("p")  //添加p元素 
    7  .text(function(d){ return d; });

    exit()

    与enter()相反,exit()是用来选择那些与数据相比多出来的DOM元素。

    在下面例子中,我们多提供了一个DOM元素:

    1 <body>
    2  <p></p>
    3  <p></p>
    4  <p></p>
    5  <p></p>
    6 </body>

    这回就容易理解了,因为是多出来的,那么就是实际存在的,即最后一个<p>。

    多出来的话,我们可以接着用.remove()移除这些元素,代码如下:

    1 d3.select("body").selectAll("p").data([1, 2, 3]).exit().remove();

    exit的处理方法

    有多出的元素,没有数据与之对应。对于这样的元素,通常的做法是使用remove()删除元素。假设body中有5个p元素,请看如下代码:

    1 var dataset = [10, 20, 30]; 
    2  var p = d3.select("body").selectAll("p"); 
    3 //绑定数据之后,分别获取update部分和exit部分 
    4  var update = p.data(dataset); 
    5  var exit = update.exit(); 
    6 //update的部分的处理方法是修改内容 
    7  update.text( function(d){ return d; } ); 
    8 //exit部分的处理方法是删除 
    9  exit.remove();

    这段代码中,对于exit部分的处理方法是删除。删除之后,网页中将不会有多余的p元素。

  • 相关阅读:
    应用服务&领域服务
    Net程序调试
    node.js爬虫
    Amazon AWS S3 操作手册
    Spring MVC的异步模式DefferedResult
    mysql解决datetime与timestamp精确到毫秒的问题
    更改MySQL数据库的编码为utf8mb4
    MySQL中的表中增加删除字段
    Sublime Text 全程指引 by Lucida
    自定义多状态高仿应用下载百分数view
  • 原文地址:https://www.cnblogs.com/thelongmarch/p/6734406.html
Copyright © 2020-2023  润新知