利用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 相关文章推荐
如何使用JS获取IE上传文件路径(IE7,8)
Jul 08 Javascript
javascript 弹出的窗口返回值给父窗口具体实现
Nov 23 Javascript
判断客户浏览器是否支持cookie的示例代码
Dec 23 Javascript
JavaScript中用于四舍五入的Math.round()方法讲解
Jun 15 Javascript
Bootstrap安装环境配置教程分享
May 27 Javascript
jQuery+ajax读取并解析XML文件的方法
Sep 09 Javascript
D3.js实现直方图的方法详解
Sep 25 Javascript
BootStrap下的弹出框加载select2框架失败的解决方法
Aug 31 Javascript
实现jquery放大镜的两种方法
Feb 22 jQuery
vue 点击按钮增加一行的方法
Sep 07 Javascript
详解angularjs4部署文件过大解决过程
Dec 05 Javascript
JS实现checkbox互斥(单选)功能示例
May 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
其他功能
2006/10/09 PHP
使用phpQuery采集网页的方法
2013/11/13 PHP
php实现图片转换成ASCII码的方法
2015/04/03 PHP
PHP预定义变量9大超全局数组用法详解
2016/04/23 PHP
微信第三方登录(原生)demo【必看篇】
2017/05/26 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
2019/02/15 PHP
解决tp5在nginx下修改配置访问的问题
2019/10/16 PHP
PHP Swoole异步MySQL客户端实现方法示例
2019/10/24 PHP
iframe异步加载实现点击左边菜单加载右边内容实例讲解
2013/03/04 Javascript
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
JQueryEasyUI之DataGrid数据显示
2016/11/23 Javascript
jquery表单插件form使用方法详解
2017/01/20 Javascript
JavaScript拖动层Div代码
2017/03/01 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
在 React、Vue项目中使用SVG的方法
2018/02/09 Javascript
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
用ES6写全屏滚动插件的示例代码
2018/05/02 Javascript
Vue看了就会的8个小技巧
2021/01/21 Vue.js
[01:33]DOTA2上海特级锦标赛 LIQUID战队完整宣传片
2016/03/16 DOTA
[04:59]DOTA2-DPC中国联赛 正赛 Ehome vs iG 选手采访
2021/03/11 DOTA
python抓取网页中链接的静态图片
2018/01/29 Python
Python安装模块的常见问题及解决方法
2018/02/05 Python
TensorFlow saver指定变量的存取
2018/03/10 Python
Python使用cx_Oracle模块操作Oracle数据库详解
2018/05/07 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
2019/01/22 Python
介绍一下write命令
2014/08/10 面试题
自主招生自荐书
2013/11/29 职场文书
主题酒店策划书
2014/01/28 职场文书
2014年三八妇女节活动总结
2014/03/01 职场文书
青春寄语大全
2014/04/09 职场文书
王力宏牛津大学演讲稿
2014/05/22 职场文书
庆元旦活动总结
2014/07/09 职场文书
项目委托协议书(最新)
2014/09/13 职场文书
党员民主生活会对照检查材料思想汇报
2014/09/28 职场文书
入党积极分子培养人意见
2015/06/02 职场文书