在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动画4.升级版遮罩效果的图片走廊--带自动运行效果
Aug 24 Javascript
js动态往表格的td中添加图片并注册事件
Jun 12 Javascript
2种jQuery 实现刮刮卡效果
Feb 01 Javascript
原生js实现手风琴功能(支持横纵向调用)
Jan 13 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
Jun 16 Javascript
webpack学习笔记之优化缓存、合并、懒加载
Aug 24 Javascript
利用JQUERY实现多个AJAX请求等待的实例
Dec 14 jQuery
mint-ui 时间插件使用及获取选择值的方法
Feb 09 Javascript
webpack4的迁移的使用方法
May 25 Javascript
vue+element-ui实现表格编辑的三种实现方式
Oct 31 Javascript
JS控制GIF图片的停止与显示
Oct 24 Javascript
微信小程序报错: thirdScriptError的错误问题
Jun 19 Javascript
详解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
phalcon框架使用指南
2016/02/23 PHP
php版银联支付接口开发简明教程
2016/10/14 PHP
php实现文件预览功能
2017/05/23 PHP
网页常用特效代码整理
2006/06/23 Javascript
重写javascript中window.confirm的行为
2012/10/21 Javascript
JQuery判断子iframe何时加载完成解决方案
2013/08/20 Javascript
nodejs中简单实现Javascript Promise机制的实例
2014/12/06 NodeJs
本人自用的global.js库源码分享
2015/02/28 Javascript
javascript实现图片自动和可控的轮播切换特效
2015/04/13 Javascript
jQuery固定元素插件scrolltofixed使用指南
2015/04/21 Javascript
javascript实现Table排序的方法
2015/05/15 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
基于jQuery实现淡入淡出效果轮播图
2020/07/31 Javascript
vue中的数据绑定原理的实现
2018/07/02 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
2018/08/22 Javascript
vue2.0 解决抽取公用js的问题
2020/07/31 Javascript
python算法学习之桶排序算法实例(分块排序)
2013/12/18 Python
Python中的True,False条件判断实例分析
2015/01/12 Python
python获取一组数据里最大值max函数用法实例
2015/05/26 Python
python3调用R的示例代码
2018/02/23 Python
使用实现XlsxWriter创建Excel文件并编辑
2018/05/04 Python
python sklearn常用分类算法模型的调用
2019/10/16 Python
Django通用类视图实现忘记密码重置密码功能示例
2019/12/17 Python
Python ORM编程基础示例
2020/02/02 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
2020/04/30 Python
Python中SQLite如何使用
2020/05/27 Python
如何使用Python自动生成报表并以邮件发送
2020/10/15 Python
Python从文件中读取数据的方法步骤
2020/11/18 Python
目前不被任何主流浏览器支持的CSS3属性汇总
2014/07/21 HTML / CSS
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
政府班子四风问题整改措施
2014/10/04 职场文书
如果用一句诗总结你的上半年,你会用哪句呢?
2019/07/16 职场文书
CSS 制作波浪效果的思路
2021/05/18 HTML / CSS
Python机器学习之底层实现KNN
2021/06/20 Python
Python爬虫基础之简单说一下scrapy的框架结构
2021/06/26 Python
用Python生成会跳舞的美女
2022/01/18 Python