效果:

包含代码点:

1、动态请求数据并更新

参考链接:https://www.cnblogs.com/shihuc/p/6064448.html

let sideBar= {open(type, d) {// ...http请求...// 数据成功请求后,将数据push到d.childrend.children.push(data);// 然后手动调用重新渲染svg函数_this.releSvgUpdate(d);}
};
nodeEnter.append("circle").on("click", function (d) {// 收缩if (d.children) {  d._children = d.children;d.children = null;_this.releSvgUpdate(d);  // 重新渲染svg}// 展开else if (d._children) {  d.children = d._children;d._children = null;_this.releSvgUpdate(d); // 重新渲染svg}// 侧边框函数(打开侧边框、http请求数据等操作)else if (d.key == 'article') {sideBar.open('article', d);}// 侧边框函数(打开侧边框、详情信息展示)else if (d.list) {sideBar.open('list', d);};});

2、circle节点图片展示

nodeEnter.append("circle").style("fill", function (d) {return `url(#bgImg-${d.id})`;})
nodeEnter.append("defs").append("pattern").attr("id", function (d) {return `bgImg-${d.id}`}).attr("height", "100%").attr("width", "100%").attr("patternContentUnits", "objectBoundingBox").append("image").attr("preserveAspectRatio", "none").attr("height", "1").attr("width", "1").attr("xlink:href", function (d) {// 判断是+(展开logo)还是-(收缩logo)let href = "../../../static/images/search/";href += d.children ? "minus.svg" : "add.svg";return href;});

3、text文字自动换行

参考链接:https://www.jianshu.com/p/263fce04422c

nodeEnter.append("text")// .text属性必须赋值,后续的this.getComputedTextLength()才能获取到文字宽高.text(function (d) { return d.name; }).attr("x", function () {let width = this.getComputedTextLength();width = (width > 70) ? width + 10 : 80;width = (width < 130) ? width : 130;let x = width / 2;return -x;})// tspan标签实现换行.each(function (d) {var text = d3.select(this),words = d.name.split('').reverse(),word,line = [],lineNumber = 0,x = +text.attr('x'),tspan = text.text(null).append('tspan').attr('x', x);while (word = words.pop()) {line.push(word);tspan.text(line.join(''));// 设置了最多显示两行,然后省略号if (lineNumber == 0 && tspan.node().getComputedTextLength() > 120) {line.pop();tspan.text(line.join('')).attr('y', -10);line = [word];++lineNumber;tspan = text.append('tspan').attr('x', x).attr('y', 10).text(word);}else if (lineNumber == 1 && tspan.node().getComputedTextLength() > 100) {tspan.text(line.join('') + '...');words = [];};}});

4、rect标签自适应文字大小

参考链接:https://www.cnblogs.com/fastmover/p/7794519.html

// 在text前插入一个rect,并按照text的属性来设置长宽及坐标
nodeEnter.insert("rect", "text") .datum(function () {// 大概计算宽高最大/小值,可实现文字垂直水平居中let d = this.nextSibling.getBBox();d.width = (d.width > 70) ? d.width + 10 : 80;d.width = (d.width < 130) ? d.width : 130;d.height = (d.height > 10) ? d.height + 20 : 30;d.x = -d.width - 1;d.y = -d.height / 2;return d;}).attr("width", function (d) { return d.width; }).attr("height", function (d) { return d.height; }).style('x', function (d) { return d.x; }).style('y', function (d) { return d.y; })

5、text、rect点击事件

d3图形是覆盖形式,故点击如下rect标签时,由于text标签在上方,故点击到text时不能触发rect点击事件(视觉上是点击了rect)

// text、rect加上同样的click事件
nodeEnter.append("text").on("click", function (d) {// click函数click(d)})
nodeEnter.insert("rect", "text").on("click", function () {// rect本无数据,故需要获取对应的text数据let d = this.nextSibling.__data__;// click函数click(d)});

还可参考此方法:D3.js鼠标悬停失败,并以重叠的对象

6、点击节点+ - logo不变化

// 手动删除该节点,使其重新渲染
d3.selectAll("g.node").each(function (d) {if (d.id == source.id) d3.select(this).remove();
});

7、连线 - 折线

//折线
let funLine = function (obj) {let s = obj.source,t = obj.target;return "M" + s.y + "," + s.x + "L" + (s.y + (t.y - s.y) / 4) + "," + s.x + "L" + (s.y + (t.y - s.y) / 4) + "," + t.x + "L" + t.y + "," + t.x;
};
// 增加新连接
link.enter().insert("path", "g").attr("class", "link").attr("d", function (d) {var o = { x: source.x0, y: source.y0 };return funLine({ source: o, target: o });});
// 原有连接更新位置
link.transition().duration(_this.releSvg.duration).attr("d", funLine);
// 折叠的链接,收缩到源节点处
link.exit().transition().duration(_this.releSvg.duration).attr("d", function (d) {var o = { x: source.x, y: source.y };return funLine({ source: o, target: o });}).remove();

8、样式设置

g.link {fill: none;  // 折线无填充(必须)
}
text {text-anchor: middle; // 水平居中dominant-baseline: central; // 垂直居中
}
rect {stroke-dasharray: 2px; // 虚线stroke-width: 1.5px; // 线粗stroke: #419AFF; // 线颜色
}
circle {r: 8; // 圆半径
}

【d3】树图-各种效果集合(附效果图)相关推荐

  1. JS日历控件集合----附效果图、源代码

    在进行开发的过程中,经常需要输入时间,特别是在进行查询.统计的时候,时间限定更为重要. 尽管ASP.NET也集成了日历控件,但是其集成的代码量很大,你可以做一个测试,当你在页面使用一个日历控件时,在发 ...

  2. [微信小程序]物流信息样式加动画效果(源代码附效果图)

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. 正文: 效果图片:(信息仅为示例) <!--pages/order/order_wl.wxml--> ...

  3. html 翻页效果,JavaScript实现翻页功能(附效果图)

    效果图: 要点: displayPage('#pageDiv','goPage','query',10,1,100); #pageDiv是显示翻页的div名称. goPage是跳转到后面的文本输入框的 ...

  4. Web 开发中很实用的10个效果【附源码下载】

    在工作中,我们可能会用到各种交互效果.而这些效果在平常翻看文章的时候碰到很多,但是一时半会又想不起来在哪,所以养成知识整理的习惯是很有必要的.这篇文章给大家推荐10个在 Web 开发中很有用的效果,记 ...

  5. html绘图环境,HTML_HTML5 在canvas中绘制文本附效果图,一、绘制文本 在绘图环境中提 - phpStudy...

    HTML5 在canvas中绘制文本附效果图 一.绘制文本 在绘图环境中提供了两种方法在canvas中绘制文本. strokeText(text,x,y) : 在(x,y)处绘制空心的文本. fill ...

  6. 安卓开发中非常炫的效果集合

    安卓开发中非常炫的效果集合 这几天开发的时候,想做一些好看而且酷炫的特效,于是又开始从网上收集各种特效资源.下面给大家一些我喜欢的把,附代码,喜欢的看源代码,然后加到自己项目去把!! 一个开源项目网站 ...

  7. 精选12个时尚的 CSS3 效果【附源码下载】

    精选12个时尚的 CSS3 效果[附源码下载] 这里是精选的12个很炫的 CSS3 效果.CSS3 是对 CSS 规范的一个很大的改善和增强,它使得 Web 开发人员可以很容易的在网站中加入时尚的效果 ...

  8. 水波纹效果,附工程源码

    2019独角兽企业重金招聘Python工程师标准>>> 实现的一个水波纹效果,附工程代码. 这个可以用任意图片响应触屏事件显示波纹效果. 很多方面都能用得上,比如动态桌面,游戏,水族 ...

  9. 8个前沿的 HTML5 CSS3 效果【附源码下载】

    作为一个前沿的 Web 开发者,对于 HTML5 和 CSS3 技术或多或少都有掌握.前几年这些新技术刚萌芽的时候,开发者们已经使用它们来小试牛刀了,如今这些先进技术已经遍地开发,特别是在移动端大显身 ...

  10. 酷毙了!三种风格的全屏幻灯片效果【附源码下载】

    今天,我们想向您展示如何创建平铺背景图像的幻灯片效果.其灵感来自于国外的一个工作室网站(围观),这个网站充满了各种有趣和创意效果,一定记得去看看. 这个幻灯片效果是由四个区域的独立移动构成,通过画面分 ...

最新文章

  1. 9月机器学习开源项目Top10
  2. MySQL在创建索引之前一定要想到的事情
  3. 中间人攻击之DNS欺骗
  4. js符号输入不可用_js禁止输入特殊字符
  5. 做一个有胆识的有为青年
  6. Redis String 类型操作及常用命令
  7. jQuery对checkbox的操作(转载)
  8. linux 网络相关,Linux系统管理员必备的21个网络相关监控
  9. 60-150-044-使用-Sink-Flink自定义RetractStreamTableSink
  10. 恒拓开源携开源中国有望于 10 月底挂牌新三板
  11. jquery系列教程6-ajax的应用全解
  12. MySQL存储过程、函数、视图、触发器、索引和锁的基本知识
  13. c语言大于一小于10,C语言首先输入一个大于2且小于10的整数
  14. matlab仓库选址,物流中心选址matlab
  15. go mod invalid pseudo-version
  16. 小白必看:IT转行需要注意什么,这几个问题很重要
  17. excel数据分析--仪表板制作
  18. java手机怎么测网速_用来检查网络和网速android小程序
  19. 申报高新技术企业的好处
  20. Object Detection in 20 years:A Survey 整理

热门文章

  1. R_展示变量之间关系的图形
  2. 【读书总结】 《你只是看起来很努力》——致那段应该奋斗的岁月
  3. python开发视频播放器_基于 Flask 的在线视频播放器
  4. pdf转换器免费版安装和使用
  5. 基本HTML标签语法整理
  6. 天牛须matlab,BAS天牛须搜索优化算法.pdf
  7. 添加用户-查看用户列表-禁止默认root登陆
  8. 笑是理想的热情与态度
  9. 音视频即时通讯—视频客服系统开发
  10. torchvision学习笔记之transforms