使用Vue.js 和Chart.js制作绚丽多彩的图表


Posted in Javascript onJune 15, 2019

前言

深入学习 chart.js 的选项来制作漂亮的图表。交互式图表可以给你的数据可视化提供很酷的展示方式。但是大多数开箱即用的解决方案用默认的选项并不能做出很绚丽的图表。

这篇文章中,我会教你如何自定义 chart.js 选项来制作很酷的图表。

⚡ Quick Start

我们需要:

  • Vue.js
  • vue-chart.js
  • vue-cli

使用 vue-cli 来搭基本架构,希望你已经安装好了。我们使用 vue-chart.js 来作为 chart.js 的打包器。

vue init webpack awesome-charts

然后到工程目录中安装依赖:

cd awesome-charts && yarn install

添加 vue-chartjs:

yarn add vue-chartjs -S

第一个图表

现在我们来创建第一个折现表。

touch src/components/LineChart.js && subl .

现在需要从 vue-chartjs 中引入折线表的基表,创建组件。

在 mount() 函数中使用我们准备好的数据和选项来调用 renderChart()方法。

import {Line} from 'vue-chartjs'
export default Line.extend({
mounted () {
this.renderChart({
labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
datasets: [
{
label: 'Data One',
backgroundColor: '#FC2525',
data: [40, 39, 10, 40, 39, 80, 40]
},{
label: 'Data Two',
backgroundColor: '#05CBE1',
data: [60, 55, 32, 10, 2, 12, 53]
}
]
}, {responsive: true, maintainAspectRatio: false})
}
})

代码中,使用了一些实例数据和可选参数传递给 chart.js 的数据对象,并且设置 responsive:true,使得图表会充满外层容器。

之所以可以使用 renderChart() 方法是因为我们继承了 BaseChart,这个方法和一些属性都是在 BaseChart 中定义的。

运行 & 测试

ok,现在从 App.vue 中把 Hello.vue 删掉,并且引入我们的图表:

<template>
<div id="app">
<div class="container">
<div class="Chart__list">
<div class="Chart">
<h2>Linechart</h2>
<line-example></line-example>
</div>
</div>
</div>
</div>
</template>
<script>
import LineExample from './components/LineChart.js'
export default {
name: 'app',
components: {
LineExample
}
}
</script>
<style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
.container {
max-width: 800px;
margin: 0 auto;
}
</style>
CopyRaw

在终端中运行 dev 脚本,就可以看到图表了。

yarn run dev

把我变得更漂亮

现在该做些美化工作了? ,chart.js 中有很多很酷的技巧。可以传递一个十六进制的颜色数据到backgroundColor,也可以传递 rgba() 值,还可以设置颜色的透明度。chart.js 使用的是 html canvas 来绘图的,所以我们使用 createLinearGradient()。

从这里开始才是有趣的起点,使用它我们需要 canvas 对象。但这事并不难,vue-chartjs 中已经存在一个它的引用。我们可以使用 this.$refs.canvas 来访问。

在 LineChart.js 中,我们创建了两个变量来保存渐变。代码如下:

this.gradient = this.$refs.canvas
.getContext(‘2d')
.createLinearGradient(0, 0, 0, 450)
this.gradient2 = this.$refs.canvas
.getContext(‘2d')
.createLinearGradient(0, 0, 0, 450)

还有另外一个函数可以使用:addColorStop()

给每个渐变创建三个颜色点:

this.gradient.addColorStop(0, ‘rgba(255, 0,0, 0.5)')
this.gradient.addColorStop(0.5, ‘rgba(255, 0, 0, 0.25)');
this.gradient.addColorStop(1, ‘rgba(255, 0, 0, 0)');
this.gradient2.addColorStop(0, ‘rgba(0, 231, 255, 0.9)')
this.gradient2.addColorStop(0.5, ‘rgba(0, 231, 255, 0.25)');
this.gradient2.addColorStop(1, ‘rgba(0, 231, 255, 0)');

现在就可以把 this.gradient 传递给 backgroundColor了,可以得到一个很好看的渐变。为了得到更好的效果,还可以设置 borderColor 的颜色,alpha 设置成 1 (或者用十六进制也行),设置 borderWidth 为 1,另外还可以设置 pointColor。

borderColor: ‘#FC2525', 
pointBackgroundColor: ‘white', 
borderWidth: 1, 
pointBorderColor: ‘white',
import {Line} from 'vue-chartjs'
export default Line.extend({
data () {
return {
gradient: null,
gradient2: null
}
},
mounted () {
this.gradient = this.$refs.canvas.getContext('2d').createLinearGradient(0, 0, 0, 450)
this.gradient2 = this.$refs.canvas.getContext('2d').createLinearGradient(0, 0, 0, 450)
this.gradient.addColorStop(0, 'rgba(255, 0,0, 0.5)')
this.gradient.addColorStop(0.5, 'rgba(255, 0, 0, 0.25)');
this.gradient.addColorStop(1, 'rgba(255, 0, 0, 0)');
this.gradient2.addColorStop(0, 'rgba(0, 231, 255, 0.9)')
this.gradient2.addColorStop(0.5, 'rgba(0, 231, 255, 0.25)');
this.gradient2.addColorStop(1, 'rgba(0, 231, 255, 0)');
this.renderChart({
labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
datasets: [
{
label: 'Data One',
borderColor: '#FC2525',
pointBackgroundColor: 'white',
borderWidth: 1,
pointBorderColor: 'white',
backgroundColor: this.gradient,
data: [40, 39, 10, 40, 39, 80, 40]
},{
label: 'Data Two',
borderColor: '#05CBE1',
pointBackgroundColor: 'white',
pointBorderColor: 'white',
borderWidth: 1,
backgroundColor: this.gradient2,
data: [60, 55, 32, 10, 2, 12, 53]
}
]
}, {responsive: true, maintainAspectRatio: false})
}
})

最后一步

最后一步是给 App.vue 的容器添加一些样式。

.Chart {
background: #212733;
border-radius: 15px;
box-shadow: 0px 2px 15px rgba(25, 25, 25, 0.27);
margin: 25px 0;
}
.Chart h2 {
margin-top: 0;
padding: 15px 0;
color: rgba(255, 0,0, 0.5);
border-bottom: 1px solid #323d54;
}

最终结果

最终结果如图:

使用Vue.js 和Chart.js制作绚丽多彩的图表

英文连接:Creating stunning charts with Vue.js and Chart.js

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
获取Javscript执行函数名称的方法
Dec 22 Javascript
js chrome浏览器判断代码
Mar 28 Javascript
jquery加载页面的方法(页面加载完成就执行)
Jun 21 Javascript
JS简单实现元素复制示例附图
Nov 19 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
Feb 13 Javascript
前端性能优化及技巧
May 06 Javascript
JavaScript中的事件委托及好处
Jul 12 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
Oct 30 Javascript
nuxt+axios解决前后端分离SSR的示例代码
Oct 24 Javascript
vue.js做一个简单的编辑菜谱功能
May 08 Javascript
Electron中实现大文件上传和断点续传功能
Oct 28 Javascript
jQuery实现查看图片功能
Dec 01 jQuery
通过实例讲解JS如何防抖动
Jun 15 #Javascript
js笔试题-接收get请求参数
Jun 15 #Javascript
深入了解JavaScript 的 WebAssembly
Jun 15 #Javascript
通过实例了解js函数中参数的传递
Jun 15 #Javascript
RxJS的入门指引和初步应用
Jun 15 #Javascript
js中let能否完全替代IIFE
Jun 15 #Javascript
回顾Javascript React基础
Jun 15 #Javascript
You might like
php+mysql查询实现无限下级分类树输出示例
2016/10/03 PHP
JavaScript中“+=”的应用
2007/02/02 Javascript
一个不错的应用,用于提交获取文章内容,不推荐用
2007/03/03 Javascript
用js实现的检测浏览器和系统的函数
2009/04/09 Javascript
15 个 JavaScript Web UI 库
2010/05/19 Javascript
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
Prototype源码浅析 String部分(三)之HTML字符串处理
2012/01/15 Javascript
计算新浪Weibo消息长度(还可以输入119字)
2013/07/02 Javascript
JS文字球状放大效果代码分享
2015/08/19 Javascript
基于javascript编写简单日历
2016/05/02 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
smartupload实现文件上传时获取表单数据(推荐)
2016/12/12 Javascript
JS中Select下拉列表类(支持输入模糊查询)功能
2017/01/17 Javascript
VUE2.0中Jsonp的使用方法
2018/05/22 Javascript
vue mounted组件的使用
2018/06/18 Javascript
JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法
2021/01/29 Javascript
[37:03]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第二场 12.16
2020/12/18 DOTA
python连接oracle数据库实例
2014/10/17 Python
利用Python中的输入和输出功能进行读取和写入的教程
2015/04/14 Python
Python编程实现二叉树及七种遍历方法详解
2017/06/02 Python
Python从数据库读取大量数据批量写入文件的方法
2018/12/10 Python
Python 的字典(Dict)是如何存储的
2019/07/05 Python
python实现身份证实名认证的方法实例
2019/11/08 Python
python实现扫雷游戏
2020/03/03 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
Keras中的两种模型:Sequential和Model用法
2020/06/27 Python
PyQt5中QSpinBox计数器的实现
2021/01/18 Python
英国医生在线预约:Top Doctors
2019/10/30 全球购物
简述安装Slackware Linux系统的过程
2012/05/08 面试题
高级文秘工作总结的自我评价
2013/09/28 职场文书
升职自荐书范文
2013/11/28 职场文书
乔迁宴答谢词
2014/01/21 职场文书
员工安全承诺书
2014/05/22 职场文书
幼儿园保育员责任书
2014/07/22 职场文书
2015年护士医德医风自我评价
2015/03/03 职场文书
golang中的空slice案例
2021/04/27 Golang