利用d3.js实现蜂巢图表带动画效果


Posted in Javascript onSeptember 03, 2019

利用d3.js实现蜂巢图表带动画效果

以上是效果图,本图表使用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方法就可实现。

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

如果大家有什么想法或意见可以交流一下。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JavaScript 编程引入命名空间的方法与代码
Aug 13 Javascript
jQuery中实现动画效果的基本操作介绍
Apr 16 Javascript
javascript两种function的定义介绍及区别说明
May 02 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
May 28 Javascript
JS远程获取网页源代码实例
Sep 05 Javascript
JS实现时间格式化的方式汇总
Oct 16 Javascript
JavaScript数值数组排序示例分享
May 27 Javascript
Firefox下无法正常显示年份的解决方法
Sep 04 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
Sep 06 Javascript
详解JS去重及字符串奇数位小写转大写
Dec 29 Javascript
JavaScript 中 JSON.parse 函数 和 JSON.stringify 函数
Dec 05 Javascript
详解小程序如何改变onLoad的执行时机
Nov 01 Javascript
JS/CSS实现字符串单词首字母大写功能
Sep 03 #Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
Sep 02 #Javascript
Layui之table中的radio在切换分页时无法记住选中状态的解决方法
Sep 02 #Javascript
layui表格分页 记录勾选的实例
Sep 02 #Javascript
layui radio点击事件实现input显示和隐藏的例子
Sep 02 #Javascript
layui复选框的全选与取消实现方法
Sep 02 #Javascript
解决Vue调用springboot接口403跨域问题
Sep 02 #Javascript
You might like
什么是MVC,好东西啊
2007/05/03 PHP
PHP函数篇之掌握ord()与chr()函数应用
2011/12/05 PHP
PHP超级全局变量数组小结
2012/10/04 PHP
JSON 客户端和服务器端的格式转换
2009/08/27 Javascript
aspx中利用js实现确认删除代码
2010/07/22 Javascript
javascript attachEvent绑定多个事件执行顺序问题
2010/10/20 Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
2012/08/14 Javascript
获取div编辑框,textarea,input text的光标位置 兼容IE,FF和Chrome的方法介绍
2012/11/08 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
2014/06/16 Javascript
jQuery中triggerHandler()方法用法实例
2015/01/19 Javascript
纯javascript实现简单下拉刷新功能
2015/03/13 Javascript
ajax跨域调用webservice的实现代码
2016/05/09 Javascript
JS如何生成一个不重复的ID的函数
2016/12/25 Javascript
基于JavaScript实现无限加载瀑布流
2017/07/21 Javascript
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
redux-saga 初识和使用
2018/03/10 Javascript
微信小程序实现bindtap等事件传参
2019/04/08 Javascript
vue  elementUI 表单嵌套验证的实例代码
2019/11/06 Javascript
Ant Design的可编辑Tree的实现操作
2020/10/31 Javascript
[01:33]真香警告!DOTA2勇士令状不朽珍藏Ⅱ饰品欣赏
2018/06/26 DOTA
Python发送Email方法实例
2014/08/21 Python
讲解Python中fileno()方法的使用
2015/05/24 Python
python中hashlib模块用法示例
2017/10/30 Python
Python scikit-learn 做线性回归的示例代码
2017/11/01 Python
python json.loads兼容单引号数据的方法
2018/12/19 Python
pytorch 实现在预训练模型的 input上增减通道
2020/01/06 Python
基于python连接oracle导并出数据文件
2020/04/28 Python
Python 找出出现次数超过数组长度一半的元素实例
2020/05/11 Python
HTML5 video标签(播放器)学习笔记(一):使用入门
2015/04/24 HTML / CSS
将世界上最美丽的摄影作品转化为艺术作品:Photos.com
2017/11/28 全球购物
如何写好自荐信
2014/04/07 职场文书
2016年春节问候语
2015/11/11 职场文书
2016年“我们的节日·端午节”活动总结
2016/04/01 职场文书
2019最新校园运动会广播稿!
2019/06/28 职场文书
高一作文之乐趣
2019/11/21 职场文书