利用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学习4 浏览器的事件模型
Feb 07 Javascript
js css后面所带参数含义介绍
Aug 18 Javascript
JS去除字符串两端空格的简单实例
Dec 27 Javascript
jQuery检查事件是否触发的方法
Jun 26 Javascript
函数window.open实现关闭所有的子窗口
Aug 03 Javascript
js确认框confirm()用法实例详解
Jan 07 Javascript
vue中for循环更改数据的实例代码(数据变化但页面数据未变)
Sep 15 Javascript
JS中获取 DOM 元素的绝对位置实例详解
Apr 23 Javascript
react-native android状态栏的实现
Jun 15 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
Feb 28 Javascript
使用原生JS实现火锅点餐小程序(面向对象思想)
Dec 10 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
Apr 11 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并发多进程处理利器Gearman使用介绍
2016/05/16 PHP
CodeIgniter记录错误日志的方法全面总结
2016/05/17 PHP
laravel添加前台跳转成功页面示例
2019/10/22 PHP
Javascript中暂停功能的实现代码
2007/03/04 Javascript
jQuery timers计时器简单应用说明
2010/10/28 Javascript
动态创建样式表在各浏览器中的差异测试代码
2011/09/13 Javascript
jQuery获取动态生成的元素示例
2014/06/15 Javascript
require.js深入了解 require.js特性介绍
2014/09/04 Javascript
node.js中的fs.fstat方法使用说明
2014/12/15 Javascript
原生javascript实现简单的datagrid数据表格
2015/01/02 Javascript
最佳的JavaScript错误处理实践
2016/07/16 Javascript
jQuery简单获取DIV和A标签元素位置的方法
2017/02/07 Javascript
js实现九宫格拼图小游戏
2017/02/13 Javascript
JS实现双击内容变为可编辑状态
2017/03/03 Javascript
node.js调用Chrome浏览器打开链接地址的方法
2017/05/17 Javascript
微信小程序项目实践之主页tab选项实现
2018/07/18 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
2018/07/22 Javascript
微信小程序wepy框架笔记小结
2018/08/08 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
2019/03/27 Javascript
Vue利用Blob下载原生二进制数组文件
2019/09/25 Javascript
详解利用eventemitter2实现Vue组件通信
2019/11/04 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
2020/03/06 Javascript
微信小程序自定义底部弹出框动画
2020/11/18 Javascript
[01:08:33]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
python写入并获取剪切板内容的实例
2018/05/31 Python
python简单实现AES加密和解密
2019/03/28 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
2019/08/06 Python
使用OpenCV circle函数图像上画圆的示例代码
2019/12/27 Python
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
Marriott国际:万豪国际酒店查询预订
2017/09/25 全球购物
水务局局长岗位职责
2013/11/28 职场文书
《雷雨》教学反思
2014/02/20 职场文书
历史专业学生的自我评价
2014/02/28 职场文书
MySQL慢查询中的commit慢和binlog中慢事务的区别
2022/06/16 MySQL