在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 相关文章推荐
一款js和css代码压缩工具[附JAVA环境配置方法]
Apr 16 Javascript
基于jQuery的history历史记录插件
Dec 11 Javascript
Javascript引用指针使用介绍
Nov 07 Javascript
jQuery的缓存机制浅析
Jun 07 Javascript
$(document).ready(function() {})不执行初始化脚本
Jun 19 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
Apr 25 Javascript
Vue项目webpack打包部署到服务器的实例详解
Jul 17 Javascript
详解Chai.js断言库API中文文档
Jan 31 Javascript
微信小程序自定义导航教程(兼容各种手机)
Dec 12 Javascript
element-ui中Table表格省市区合并单元格的方法实现
Aug 07 Javascript
vue element-ui el-date-picker限制选择时间为当天之前的代码
Nov 07 Javascript
js原生map实现的方法总结
Jan 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
PHP及Zend Engine的线程安全模型分析
2011/11/10 PHP
服务器变量 $_SERVER 的深入解析
2013/07/02 PHP
四个常见html网页乱码问题及解决办法
2015/09/08 PHP
Yii2.0预定义的别名功能小结
2016/07/04 PHP
thinkPHP5.0框架URL访问方法详解
2017/03/18 PHP
jquery 输入框数字限制插件
2009/11/10 Javascript
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
2010/03/23 Javascript
如何在一个页面显示多个百度地图
2013/04/07 Javascript
jquery利用命名空间移除绑定事件的方法
2015/03/11 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
jquery分隔Url的param方法(推荐)
2016/05/25 Javascript
使用jQuery.Pin垂直滚动时固定导航
2017/05/24 jQuery
bootstrap-table组合表头的实现方法
2017/09/07 Javascript
JavaScript实现单击网页任意位置打开新窗口与关闭窗口的方法
2017/09/21 Javascript
Vue多种方法实现表头和首列固定的示例代码
2018/02/02 Javascript
js+html5 canvas实现ps钢笔抠图
2019/04/28 Javascript
js JSON.stringify()基础详解
2019/06/19 Javascript
JS数组进阶示例【数组的几种函数用法】
2020/01/16 Javascript
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
python中正则表达式的使用详解
2014/10/17 Python
Python手机号码归属地查询代码
2016/05/04 Python
python中数据爬虫requests库使用方法详解
2018/02/11 Python
python读写配置文件操作示例
2019/07/03 Python
Django CBV类的用法详解
2019/07/26 Python
Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]
2020/02/13 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
2020/04/22 Python
Python 在局部变量域中执行代码
2020/08/07 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
Belvilla德国:在线预订度假屋
2018/04/10 全球购物
美国在线乐器和设备商店:Musician’s Friend
2018/07/06 全球购物
班主任对学生的评语
2014/04/26 职场文书
十佳中学生事迹材料
2014/06/02 职场文书
小学课外阅读总结
2014/07/09 职场文书
初一语文教学反思
2016/03/03 职场文书