首页 > 其他分享 >d3.js制作蜂巢图表带动画效果

d3.js制作蜂巢图表带动画效果

时间:2023-04-10 17:55:45浏览次数:36  
标签:attr 蜂巢 js 滤镜 var 六边形 d3 append

  以上是效果图,本图表使用d3.js v4制作。图表主要功能是在六边形格子中显示数据,点击底部图标可以切换指定格子高亮显示,图表可以随浏览器任意缩放。

  1.图表的主体结构是由正六边形组成,使用d3生成六边形可以使用d3-hexbin.js,生成六边形比较方便,只要给定中心点坐标和半径即可生成六边形路径,例如:

var r = 10; // 六边形半径
var pos = [[5,5],[10,10]]; // 六边形中心点坐标数组
var hexbin = d3.hexbin() // 使用hexbin.hexagon()即可生成路径
      .radius(r);
var bins = hexbin(pos); // 得到生成后的六边形中心点坐标数组

2.图表的主体使用了高斯模糊滤镜,使画面表现出发光效果,背景高亮颜色使用了颜色渐变滤镜。在svg中使用滤镜,必须定义在defs中。

高斯模糊滤镜:

// 创建defs
var defs = svg.append("defs");
// 添加模糊滤镜
var filterBlur = defs.append('filter')
 .attr('id', 'filterBlur')
 .attr('x', -1.2)
 .attr('y', -1.2)
 .attr('width', 4)
 .attr('height', 4);
// 添加辅助滤镜
filterBlur.append('feOffset')
 .attr('result', 'offOut')
 .attr('in', 'SourceGraphic')
 .attr('dx', 0)
 .attr('dy', 0);
// 添加模糊滤镜
filterBlur.append('feGaussianBlur')
 .attr('result', 'blurOut')
 .attr('in', 'SourceGraphic')
 .attr('stdDeviation', 2);
// 添加辅助滤镜
filterBlur.append('feBlend')
 .attr('in', 'SourceGraphic')
 .attr('in2', 'blurOut')
 .attr('mode', 'multiply');

重点说一下最后的feBlend,它的作用是把滤镜效果和原图混合起来。使用滤镜的话,直接给元素添加style('filter', 'url(#filterBlur)')即可。

背景高亮使用了颜色渐变滤镜:

// 添加放射性变换,生成空心填充颜色
var warnBg = defs.append("radialGradient")
        .attr("id", "bg")
        .attr('cx', 0.5)
        .attr('cy', 0.5)
        .attr('r', 0.5);
// 添加颜色
warnBg.append('stop')
        .attr('offset', 0.5)
        .attr('style', 'stop-color:rgb(200,200,200);stop-opacity:0.4');
warnBg.append('stop')
        .attr('offset', 1)
        .attr('style', 'stop-opacity:1;stop-color:rgb(123,123,123)');

其中涉及到的关键性技术就是这些,其他方面只要使用通用的d3方法就可实现。

需要注意的是,程序的结构要预先规划好,最好把主要的功能模块放在单独一个函数中,方便调用和后期修改。

标签:attr,蜂巢,js,滤镜,var,六边形,d3,append
From: https://www.cnblogs.com/cczlovexw/p/17303748.html

相关文章

  • 记录-html-docs-js避坑指南
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助前言我们公司目前在做基于tiptap的在线协同文档,最近需要做导出pdf、word需求。导出word文档使用的是html-docx-js-typescript,是用typescript重写了一下html-docx-js,可以看到最近的提交记录是2016年,貌似已......
  • JSON.parse意外失败的问题(传入内容在校验网站上检查无误)(传入内容来自CryptoJS.AES.dec
    背景:由CryptoJS.AES.decrypt解码来的数据并进行toString(CryptoJS.enc.Utf8)之后,无法使用JSON.parse转换成json数据,但是使用在线校验工具认为格式正确。可能是由于解码后的字符串包含了一些特殊字符或者不可见字符,导致JSON.parse方法无法正确解析字符串。可以尝试使用console.log......
  • js删除cookie失败
    如果js删除cookie失败,请检查以下要点:cookie不为httpOnly删除cookie字段要设置全,字段要保持一致,比如:document.cookie='token=xxxx;path=/;domain=.baidu.com;max-age=-1'如果cookie的domain为当前域名,不需要声明domain字段,比如是news.baidu.com而不是.news.baidu.comd......
  • json-server 笔记
    在vs-code的终端下运行出错:PSE:\newsvn\vue3学习\vite-blog>json-server--watchdb.jsonjson-server:无法加载文件C:\Users\Administrator\AppData\Roaming\npm\json-server.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅https:/go.microsoft.com/fwlink/?LinkID=......
  • rxjs的几点使用心得
    1.对错误的处理日常使用中,点击按钮需要往后台发消息,为了不重复发消息,经常需要把点击事件做成subject,然后把发消息的过程做成switchMap,类似下面的写法  constsubject=newrxjs.Subject();  subject.pipe(   rxjs.operators.switchMap(index=>{   ......
  • js:模板解析实现2 -- 支持子列表
    难度是对于子循环列表的解析,比第一个实现有更好的解析效果和应用-----解析代码---/**调用形式tags.call({sid:'含解析html父级id',endFunc:解析结束执行Func},{listsObj});*能够使用注释的位置可以使用注释格式,不能使用时可以使用@.---photo--@来代替<!---photo-->......
  • js:浏览器跨域ajax变通实现 -- flash + js + crossdomain.xml
    使用此方式能很好解决这个问题,因为考虑了php中转形式的双倍时间和莫须有的访问,不是很愿意用,除非不得已,现在找到flash的实现方法,对于能自按的服务器来说这是不错的解决方案,只需要担心的是有人不愿意安装flash控件,且能解决script方式的不能post不足,除非浏览器已经统一支持跨......
  • js:四个方向无跳动/无缝滚动,支持图片/html串,支持延时缓慢翻页,ff/ie测试 -- 2012-1-
    ----------代码----------<!DOCTYPEhtml><html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/><title></title></head><body><divid="gg"><......
  • Node.js安装
    一、安装1、安装包下载https://nodejs.org/download/release/v16.20.0/2、将node-v16.20.0-linux-x64.tar.gz上传至/opt/soft目录3、解压cd/opt/soft&&tar-zxvfnode-v16.20.0-linux-x64.tar.gz-C/opt/module/4、重命名cd/opt/module&&mvnode-v16.20.0-li......
  • 和我一起学 Three.js【初级篇】:1. 搭建 3D 场景
    欢迎关注「前端乱步」公众号,我会在此分享Web开发技术,前沿科技与互联网资讯。0.系列文章合集本系列第6,7章节支持微信公众号内付费观看,将在全系列文章点赞数+评论数>=500,1000时分别解锁发布。《0.总论》......