利用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 相关文章推荐
Firefox下提示illegal character并出现乱码的原因
Mar 25 Javascript
Js注册协议倒计时的小例子
Jun 24 Javascript
jquery根据锚点offset值实现动画切换
Sep 11 Javascript
javascript判断css3动画结束 css3动画结束的回调函数
Mar 10 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
Jan 04 Javascript
老生常谈js动态添加事件--- 事件委托
Jul 19 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
Apr 03 jQuery
源码分析Vue.js的监听实现教程
Apr 23 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
Sep 29 Javascript
React Native 图片查看组件的方法
Mar 01 Javascript
pm2启动ssr失败的解决方法
Jun 29 Javascript
如何在Express4.x中愉快地使用async的方法
Nov 18 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
用文本作数据处理
2006/10/09 PHP
thinkphp的c方法使用示例
2014/02/24 PHP
PHP结合Mysql数据库实现留言板功能
2016/03/04 PHP
PHP 实现手机端APP支付宝支付功能
2018/06/07 PHP
JavaScript实现动态增加文件域表单
2009/02/12 Javascript
extjs 如何给column 加上提示
2014/07/29 Javascript
使用jQuery在对象中缓存选择器的简单方法
2015/06/30 Javascript
jquery判断输入密码两次是否相等
2020/04/22 Javascript
JS实现放大、缩小及拖拽图片的方法【可兼容IE、火狐】
2016/08/23 Javascript
TypeScript入门-接口
2017/03/30 Javascript
微信小程序五星评分效果实现代码
2017/04/06 Javascript
AngularJS动态菜单操作指令
2017/04/25 Javascript
JavaScript之RegExp_动力节点Java学院整理
2017/06/29 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
2019/04/17 Javascript
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
2019/05/03 Javascript
Vue实现商品分类菜单数量提示功能
2019/07/26 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
js实现的在本地预览图片功能示例
2019/11/09 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
2019/12/04 Javascript
vue二选一tab栏切换新做法实现
2021/01/19 Vue.js
python的迭代器与生成器实例详解
2014/07/16 Python
浅析Python中yield关键词的作用与用法
2016/11/29 Python
使用python Telnet远程登录执行程序的方法
2019/01/26 Python
pandas读取csv文件提示不存在的解决方法及原因分析
2020/04/21 Python
Python grpc超时机制代码示例
2020/09/14 Python
css3 盒模型以及box-sizing属性全面了解
2016/09/20 HTML / CSS
比利时家具购买网站:Home24
2019/01/03 全球购物
德国最大的婴儿用品网上商店:Kidsroom.de(支持中文)
2020/09/02 全球购物
Java面试中常遇到的问题,也是需要注意的几点
2013/08/30 面试题
关于毕业的中学校园广播稿
2014/01/26 职场文书
校园文明倡议书
2014/05/16 职场文书
电子专业自荐信
2014/07/01 职场文书
倡议书格式
2014/08/30 职场文书
简单的辞职信模板
2015/05/12 职场文书
2017春节晚会开幕词
2016/03/03 职场文书
MySQL约束超详解
2021/09/04 MySQL