利用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 相关文章推荐
另类调用flash无须激活的方法
Dec 27 Javascript
jquery 得到当前页面高度和宽度的两个函数
Feb 21 Javascript
20个非常棒的 jQuery 幻灯片插件和教程分享
Aug 23 Javascript
js动态在form上插入enctype=multipart/form-data的问题
May 24 Javascript
jquery滚动加载数据的方法
Mar 09 Javascript
javascript 中的console.log和弹出窗口alert
Aug 30 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
Jul 05 Javascript
Angular中支持SCSS的方法
Nov 18 Javascript
jquery如何实现点击空白处隐藏元素
Dec 05 jQuery
vue使用axios实现文件上传进度的实时更新详解
Dec 20 Javascript
如何在vue里添加好看的lottie动画
Aug 02 Javascript
解决layui表格的表头不滚动的问题
Sep 04 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
php格式化日期和时间格式化示例分享
2014/02/24 PHP
Discuz7.2版的faq.php SQL注入漏洞分析
2014/08/06 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
2014/08/21 PHP
JavaScript读取中文cookie时的乱码问题的解决方法
2009/10/14 Javascript
Jquery动态改变图片IMG的src地址示例
2013/06/25 Javascript
js确认删除对话框适用于a标签及submit
2014/07/10 Javascript
JavaScript取得WEB安全颜色列表的方法
2015/07/14 Javascript
NodeJS实现阿里大鱼短信通知发送
2016/01/17 NodeJs
JavaScript中split与join函数的进阶使用技巧
2016/05/03 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
浅谈jQuery为哪般去掉了浏览器检测
2016/08/29 Javascript
原生js实现下拉框功能(支持键盘事件)
2017/01/13 Javascript
利用JS实现简单的日期选择插件
2017/01/23 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
jQuery之动画ajax事件(实例讲解)
2017/07/18 jQuery
细说webpack源码之compile流程-rules参数处理技巧(2)
2017/12/26 Javascript
swiper Scrollbar滚动条组件详解
2019/09/08 Javascript
layui使用form表单实现post请求页面跳转的方法
2019/09/14 Javascript
JS中比较两个Object数组是否相等方法实例
2019/11/11 Javascript
原生JavaScript之es6中Class的用法分析
2020/02/23 Javascript
vue 导航锚点_点击平滑滚动,导航栏对应变化详解
2020/08/10 Javascript
如何使用 vue-cli 创建模板项目
2020/11/19 Vue.js
python实现巡检系统(solaris)示例
2014/04/02 Python
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
wxpython 最小化到托盘与欢迎图片的实现方法
2014/06/09 Python
Python lxml模块安装教程
2015/06/02 Python
Python django实现简单的邮件系统发送邮件功能
2017/07/14 Python
python3+PyQt5实现自定义窗口部件Counters
2018/04/20 Python
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
Python Numpy中数据的常用保存与读取方法
2020/04/01 Python
家乐福巴西网上超市:Carrefour巴西
2016/10/31 全球购物
荷兰家电销售网站:Welhof
2020/12/08 全球购物
公职人员索取回扣检举信
2014/04/04 职场文书
论文致谢词范文
2015/05/14 职场文书
2016年万圣节活动个人总结
2016/04/05 职场文书
如何自己动手写SQL执行引擎
2021/06/02 MySQL