利用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 相关文章推荐
修改jquery里的dialog对话框插件为框架页(iframe) 的方法
Sep 14 Javascript
JS 面向对象之神奇的prototype
Feb 26 Javascript
捕获键盘事件(且兼容各浏览器)
Jul 03 Javascript
jquery获取css中的选择器(实例讲解)
Dec 02 Javascript
jquery中交替点击事件toggle方法的使用示例
Dec 08 Javascript
使用jQuery获得内容以及内容的属性
Feb 26 Javascript
Javascript递归打印Document层次关系实例分析
May 15 Javascript
Javascript中setTimeOut和setInterval的定时器用法
Jun 12 Javascript
微信小程序 利用css实现遮罩效果实例详解
Jan 21 Javascript
Vue.js实现输入框绑定的实例代码
Aug 24 Javascript
JS实现合并json对象的方法
Oct 10 Javascript
bootstrap Table的一些小操作
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
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
php根据操作系统转换文件名大小写的方法
2014/02/24 PHP
php中curl、fsocket、file_get_content三个函数的使用比较
2014/05/09 PHP
php约瑟夫问题解决关于处死犯人的算法
2015/03/23 PHP
linux下php上传文件注意事项
2016/06/11 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
2017/05/15 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
2019/10/15 PHP
javascript实现瀑布流动态加载图片原理
2016/08/12 Javascript
详解js中Json的语法与格式
2016/11/22 Javascript
基于javascript实现的购物商城商品倒计时实例
2016/12/11 Javascript
Javascript 使用ajax与C#获取文件大小实例详解
2017/01/13 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
2017/02/15 Javascript
jQuery zTree树插件动态加载实例代码
2017/05/11 jQuery
jQuery Form插件使用详解_动力节点Java学院整理
2017/07/17 jQuery
elemetUi 组件--el-upload实现上传Excel文件的实例
2017/10/27 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
2019/12/10 Javascript
vue-cli中实现响应式布局的方法
2021/03/02 Vue.js
[02:49:21]2019完美盛典全程录像
2019/12/08 DOTA
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
python集合类型用法分析
2015/04/08 Python
Python实现的朴素贝叶斯算法经典示例【测试可用】
2018/06/13 Python
Python多进程池 multiprocessing Pool用法示例
2018/09/07 Python
python实现网站用户名密码自动登录功能
2019/08/09 Python
python实现单张图像拼接与批量图片拼接
2020/03/23 Python
python 用Matplotlib作图中有多个Y轴
2020/11/28 Python
python 实现一个简单的线性回归案例
2020/12/17 Python
python实现简单猜单词游戏
2020/12/24 Python
世界各地的旅游、观光和活动:Isango!
2019/10/29 全球购物
伦敦最受欢迎的蛋糕店:Konditor & Cook
2019/11/01 全球购物
俄罗斯小米家用电器、电子产品和智能家居商店:Poood.ru
2020/04/03 全球购物
历史学专业毕业生求职信
2013/09/27 职场文书
《挑山工》的教学反思
2014/02/16 职场文书
大学班级学风建设方案
2014/05/01 职场文书
导游词欢迎词
2015/02/02 职场文书
建筑工地资料员岗位职责
2015/04/13 职场文书
pycharm 如何查看某一函数源码的快捷键
2021/05/12 Python