前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使用d3.js 的join()函数处理dom元素的更新

使用d3.js 的join()函数处理dom元素的更新

作者头像
狂奔滴小马
发布2021-11-15 14:42:51
发布2021-11-15 14:42:51
2.5K00
代码可运行
举报
文章被收录于专栏:前端专享前端专享
运行总次数:0
代码可运行

d3 .js 在v5 版本新增了一个函数join()

在v4 版本中

代码语言:javascript
代码运行次数:0
运行
复制
var myData = [ 10, 40, 30, 50, 20 ];

var u = d3.select('.container').selectAll('circle')
  .data(myData);

u.enter()
  .append('circle')
  .merge(u)
  .attr('r', function(d) { return d; });

u.exit()
  .remove();

v5 版本可以简话成.join('element') 自动处理 enter 和 exit

代码语言:javascript
代码运行次数:0
运行
复制
var myData = [ 10, 40, 30, 50, 20 ];

d3.select('.container')
  .selectAll('circle')
  .data(myData)
  .join('circle')
  .attr('r', function(d) { return d; });

在V5版本中我们希望处理元素如何进入和如何退出 列如,我们希望元素

  • 希望进入页面时淡入
  • 希望退出页面时向右飞出

使用.enter()和.exit()功能允许你这样做,但如果我们使用5版中的,使用.join()改怎么办?

答案是.join()具有三个参数,每个参数都是一个处理输入,更新和退出元素的函数。

代码语言:javascript
代码运行次数:0
运行
复制
var myData = [10, 40, 30, 50, 20];

var circleSpacing = 100;
var transitionDuration = 500;

d3.select('g.container')
  .selectAll('circle')
  .data(myData)
  .join(
    function(enter) {
      return enter
          .append('circle')
          .style('opacity', 0);
    },
    function(update) {
       return update;
    },
    function(exit) {
      return exit
        .transition()
        .duration(transitionDuration)
        .attr('r', 0)
        .style('opacity', 0)
        .attr('cx', 1000)
        .on('end', function() {
          d3.select(this).remove();
        });
    }
  ).attr('cx', function(d, i) {
      return i * circleSpacing;
    })
    .transition()
    .duration(transitionDuration)
    .attr('r', function(d) {
      return d;
    })
    .style('opacity', 1);

总结一下

D3.js的优点,数据绑定是,它提供.enter()和.exit()功能,使细粒在进入和退出元件控制。

随着版本5的到来,.join()我们已经展示了如何仍然可以通过将函数传递到中来控制进入和退出元素.join()。

  • 第一个参数指定元素在创建后会发生什么
  • 第二个参数指定页面上已经存在的元素发生什么情况
  • 第三个参数指定现有元素发生了什么
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 总结一下
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档