利用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 相关文章推荐
070823更新的一个[消息提示框]组件 兼容ie7
Aug 29 Javascript
不要小看注释掉的JS 引起的安全问题
Dec 27 Javascript
window.name代替cookie的实现代码
Nov 28 Javascript
js和jquery中循环的退出和继续学习记录
Sep 06 Javascript
jsp 网站引入外部css或者js失效问题解决
Oct 31 Javascript
简单实现JS上传图片预览功能
Apr 14 Javascript
微信小程序 图片宽高自适应详解
May 11 Javascript
JavaScript函数定义方法实例详解
Mar 05 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
May 13 Javascript
vue input标签通用指令校验的实现
Nov 05 Javascript
js使用文档就绪函数动态改变页面内容示例【innerHTML、innerText】
Nov 07 Javascript
vue实现匀速轮播效果
Jun 29 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下用rmdir实现删除目录的三种方法小结
2008/04/20 PHP
对象失去焦点时自己动提交数据的实现代码
2012/11/06 PHP
PHP常用正则表达式集锦
2014/08/17 PHP
微信公众平台接口开发入门示例
2014/12/24 PHP
在PHP 7下安装Swoole与Yar,Yaf的方法教程
2017/06/02 PHP
javascript 的Document属性和方法集合
2010/01/25 Javascript
离开页面时检测表单元素是否被修改,提示保存的js代码
2010/08/25 Javascript
仅IE6/7/8中innerHTML返回值忽略英文空格的问题
2011/04/07 Javascript
JQuery之focus函数使用介绍
2013/08/20 Javascript
js获取触发事件元素在整个网页中的绝对坐标(示例代码)
2013/12/13 Javascript
jQuery中siblings()方法用法实例
2015/01/08 Javascript
js实现从数组里随机获取元素
2015/01/12 Javascript
JavaScript中实现单体模式分享
2015/01/29 Javascript
js控制网页前进和后退的方法
2015/06/08 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
js制作网站首页图片轮播特效代码
2016/08/30 Javascript
Vue概念及常见命令介绍(1)
2016/12/08 Javascript
Node连接mysql数据库方法介绍
2017/02/07 Javascript
Angularjs中的ui-bootstrap的使用教程
2017/02/19 Javascript
Node.js服务器开启Gzip压缩教程
2017/08/11 Javascript
浅谈Angular2 ng-content 指令在组件中嵌入内容
2017/08/18 Javascript
Node.js readline模块与util模块的使用
2018/03/01 Javascript
vue.js 实现输入框动态添加功能
2018/06/25 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
让你30分钟快速掌握vue3教程
2020/10/26 Javascript
vuecli项目构建SSR服务端渲染的实现
2020/10/30 Javascript
利用Python抓取行政区划码的方法
2016/11/28 Python
python导出hive数据表的schema实例代码
2018/01/22 Python
Django之无名分组和有名分组的实现
2019/04/16 Python
Python pip使用超时问题解决方案
2020/08/03 Python
css3弹性盒模型实例介绍
2013/05/27 HTML / CSS
大学生工作推荐信范文
2013/12/02 职场文书
大学生涯自我鉴定
2014/01/16 职场文书
工作骂脏话检讨书
2014/10/05 职场文书
廉洁自律承诺书2015
2015/01/22 职场文书
MySQL优化之慢日志查询
2022/06/10 MySQL