在Vue项目中使用d3.js的实例代码


Posted in Javascript onMay 01, 2018

之前写一个 Demo里面 有些东西要使用d3实现一些效果 但是在很多论坛找资源都找不到可以在Vue里面使用D3.js的方法,npm 上面的D3相对来说 可以说是很不人性化了 完全没有说 在webpack上怎么使用D3.js

最后折腾很久 看到某位外国大佬 看他的案例 成功的实现了在Vue项目里面实现D3的使用

首先安装

npm install d3 --save-dev

以防万一,然后看package.json

在Vue项目中使用d3.js的实例代码

安装完成

在我们开始之前,让我们渲染一个Vue组件,它使用常规的D3 DOM操作呈现一个简单的折线图:

<script>
import * as d3 from 'd3';
const data = [99, 71, 78, 25, 36, 92];
export default {
 name: 'non-vue-line-chart',
 template: '<div></div>',
 mounted() {
  const svg = d3.select(this.$el)
   .append('svg')
   .attr('width', 500)
   .attr('height', 270)
   .append('g')
   .attr('transform', 'translate(0, 10)');
  const x = d3.scaleLinear().range([0, 430]);
  const y = d3.scaleLinear().range([210, 0]);
  d3.axisLeft().scale(x);
  d3.axisTop().scale(y);
  x.domain(d3.extent(data, (d, i) => i));
  y.domain([0, d3.max(data, d => d)]);
  const createPath = d3.line()
   .x((d, i) => x(i))
   .y(d => y(d));
  svg.append('path').attr('d', createPath(data));
 },
};
</script>
<style lang="sass">
svg
 margin: 25px;
 path
  fill: none
  stroke: #76BF8A
  stroke-width: 3px
</style>

代码简单易懂,但这仅仅是一个基本的例子。因为我们没有使用模板,所以需要更多操作和计算的更复杂的可视化会掩盖组件的设计和逻辑。上述方法的另一个警告是,我们不能使用scopedCSS 的属性,因为D3会动态地向DOM添加元素。

在Vue项目中使用d3.js的实例代码

可以使用比较奇怪,但是代码比较优雅的方式去实现

<template>
 <svg width="500" height="270">
  <g style="transform: translate(0, 10px)">
   <path :d="line" />
  </g>
 </svg>
</template>
<script>
import * as d3 from 'd3';
export default {
 name: 'vue-line-chart',
 data() {
  return {
   data: [99, 71, 78, 25, 36, 92],
   line: '',
  };
 },
 mounted() {
  this.calculatePath();
 },
 methods: {
  getScales() {
   const x = d3.scaleTime().range([0, 430]);
   const y = d3.scaleLinear().range([210, 0]);
   d3.axisLeft().scale(x);
   d3.axisBottom().scale(y);
   x.domain(d3.extent(this.data, (d, i) => i));
   y.domain([0, d3.max(this.data, d => d)]);
   return { x, y };
  },
  calculatePath() {
   const scale = this.getScales();
   const path = d3.line()
    .x((d, i) => scale.x(i))
    .y(d => scale.y(d));
   this.line = path(this.data);
  },
 },
};
</script>
<style lang="sass" scoped>
svg
 margin: 25px;
path
 fill: none
 stroke: #76BF8A
 stroke-width: 3px
</style>

非常酷,即使它没有公开任何属性并且数据是硬编码的,它很好地将视图从逻辑中分离出来,并且使用Vue钩子,方法和data对象,现象和上图一样的。

总结

以上所述是小编给大家介绍的在Vue项目中使用d3.js的实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
jQuery UI-Draggable 参数集合
Jan 10 Javascript
javascript中字符串的定义示例代码
Dec 19 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
Mar 18 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
Jun 05 Javascript
使用jQuery实现验证上传图片的格式与大小
Dec 03 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(二)
May 17 Javascript
微信小程序 wxapp视图容器 view详解
Oct 31 Javascript
JS实现淡入淡出图片效果的方法分析
Dec 20 Javascript
JS闭包与延迟求值用法示例
Dec 22 Javascript
详解如何使用webpack+es6开发angular1.x
Aug 16 Javascript
vue中英文切换实例代码
Jan 21 Javascript
vue css 相对路径导入问题级踩坑记录
Jun 05 Vue.js
详解ajax的data参数错误导致页面崩溃
Apr 30 #Javascript
妙用缓存调用链实现JS方法的重载
Apr 30 #Javascript
JS实现的缓冲运动效果示例
Apr 30 #Javascript
Vue波纹按钮组件制作
Apr 30 #Javascript
学习JS中的DOM节点以及操作
Apr 30 #Javascript
WebSocket的通信过程与实现方法详解
Apr 29 #Javascript
jQuery实现遍历XML节点和属性的方法示例
Apr 29 #jQuery
You might like
php实现的美国50个州选择列表实例
2015/04/20 PHP
PHP如何通过AJAX方式实现登录功能
2015/11/23 PHP
js onpropertychange输入框 事件获取属性
2009/03/26 Javascript
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
php对mongodb的扩展(初识如故)
2012/11/11 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
浅谈JavaScript正则表达式分组匹配
2015/04/10 Javascript
Node.js的Express框架使用上手指南
2016/03/12 Javascript
js判断请求的url是否可访问,支持跨域判断的实现方法
2016/09/17 Javascript
request请求获取参数的实现方法(post和get两种方式)
2016/09/27 Javascript
基于jQuery代码实现圆形菜单展开收缩效果
2017/02/13 Javascript
jQuery插件FusionCharts绘制的3D双柱状图效果示例【附demo源码】
2017/04/20 jQuery
使用JS实现气泡跟随鼠标移动的动画效果
2017/09/16 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
2018/09/15 Javascript
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
2018/10/12 Javascript
解决Vue+Electron下Vuex的Dispatch没有效果问题
2019/05/20 Javascript
详解Vue Cli浏览器兼容性实践
2020/06/08 Javascript
python基于Tkinter库实现简单文本编辑器实例
2015/05/05 Python
Python加pyGame实现的简单拼图游戏实例
2015/05/15 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
python 计算两个列表的相关系数的实现
2019/08/29 Python
python中的django是做什么的
2020/07/31 Python
详解Django中views数据查询使用locals()函数进行优化
2020/08/24 Python
Sandro Paris美国官网:典雅别致的法国时尚服饰品牌
2017/12/26 全球购物
自荐书4要点
2014/01/25 职场文书
企业消防安全制度
2014/02/02 职场文书
家长通知书教师评语
2014/04/17 职场文书
给校长的建议书400字
2014/05/15 职场文书
2015年宣传部部长竞选演讲稿
2014/11/28 职场文书
交通安全宣传标语(100条)
2019/08/22 职场文书
如何使用vue3打造一个物料库
2021/05/08 Vue.js
springboot项目以jar包运行的操作方法
2021/06/30 Java/Android
解决redis批量删除key值的问题
2022/03/23 Redis
Python字符串常规操作小结
2022/04/03 Python
Dubbo+zookeeper搭配分布式服务的过程详解
2022/04/03 Java/Android
Java 多态分析
2022/04/26 Java/Android