webpack4.0各個擊破(3)—— Assets篇
1134
2022-05-30
目錄
一、案例展示
二、ECharts 用法與常用屬性介紹
1.在項目中引入 ECharts
2.繪制圖表
3.常用配置項
三、案例完整代碼 + 詳細注釋
一、案例展示
本例通過一個 echarts 圖表的 demo 來熟悉圖表的各屬性;
此 demo 實現了圖表數據的展示、縮放、全屏展示、拖拽以及自定義工具如圖表切換等功能;效果如下:
二、ECharts 用法與常用屬性介紹
1.在項目中引入 ECharts
(1)首先使用 npm下載安裝 ECharts;
npm install echarts --save
(2)在項目的 main.js 文件中引入(此處為全局引入,后續在單個 .vue 頁面中無需再引);
//引入
import echarts from 'echarts'
import * as Echarts5 from 'echarts5' //echarts新版本echarts5
//使用
Vue.prototype.$echarts = echarts;
Vue.prototype.$echarts5 = Echarts5; //新版本
2.繪制圖表
(1)首先為 ECharts 準備一個定義了高寬的 DOM 容器;
(2)初始化 echarts 實例并顯示圖表
在 vue?的 methods:{ } 中定義方法繪制圖表,初始化 echarts 實例;
export default {
data() {
return {}
},
methods: {
drawChart() {
//初始化echarts實例
var myChart = this.$echarts.init(document.getElementById('main'));
//圖表的配置項和數據
var option = {};
//使用剛指定的配置項和數據顯示圖表。
myChart.setOption(option);
}
},
mounted() {
//調用方法
this.drawChart();
}
}
注意在 vue 中初始化 echarts 實例與官網稍有不同,需要將?echarts.init?改為?this.$echarts.init?,定義后的方法也需要在 vue 掛載階段 mounted(){ }?中進行調用。
3.常用配置項
區域縮放,常用的為內置型數據區域縮放組件(dataZoomInside),內置于坐標系中,使用戶可以在坐標系上通過鼠標拖拽、鼠標滾輪、手指滑動(觸屏上)來縮放或漫游坐標系。
地理坐標系組件,用于地圖的繪制。
更多詳情請參見 ECharts 官網的配置項手冊:Documentation - Apache EChartsECharts, a powerful, interactive charting and visualization library for browserhttps://echarts.apache.org/zh/option.html#title
三、案例完整代碼 + 詳細注釋
export default {
data() {
return {
//此處是柱圖中的數據,便于引用數據的舉例;餅圖和折線圖數據我直接寫在了option內
array: [
['公司名', 'A公司', 'B公司', 'C公司'],
['周一', '90', '85', '50'],
['周二', '110', '85', '60'],
['周三', '150', '145', '60'],
['周四', '190', '100', '80'],
['周五', '90', '110', '110'],
['周六', '90', '130', '60'],
['周日', '60', '45', '80']
]
}
},
name: "Echarts",
methods: {
//繪制柱狀圖
drawChart_bar() {
//初始化Echarts實例,注意在vue中要使用 this.$echarts.init
let myEchart = this.$echarts.init(document.getElementById("bar"));
//指定圖表配置項和數據
let option = {
// 內置型縮放
dataZoom: {
type: 'inside'
},
//提示框
tooltip: {
trigger: 'item',
},
//工具欄
toolbox: {
padding: [7, 6],
show: true,
//自定義工具
feature: {
magicType: {
type: ["line", "bar"]
},
//配置項還原
restore: {},
//保存為圖片
saveAsImage: {},
//定義全屏展示,注意在不同的瀏覽器全屏展示寫法也是不同的
mytool1: {
show: true,
title: '全屏展示',
icon: 'path://M432.45,595.444c0,2.177-4.661,6.82-11.305,6.82c-6.475,0-11.306-4.567-11.306-6.82s4.852-6.812,11.306-6.812C427.841,588.632,432.452,593.191,432.45,595.444L432.45,595.444z M421.155,589.876c-3.009,0-5.448,2.495-5.448,5.572s2.439,5.572,5.448,5.572c3.01,0,5.449-2.495,5.449-5.572C426.604,592.371,424.165,589.876,421.155,589.876L421.155,589.876z M421.146,591.891c-1.916,0-3.47,1.589-3.47,3.549c0,1.959,1.554,3.548,3.47,3.548s3.469-1.589,3.469-3.548C424.614,593.479,423.062,591.891,421.146,591.891L421.146,591.891zM421.146,591.891',
onclick: () => {
this.fullFlag = true;
let element = document.getElementById('bar');
// element.setOption(pacchartOption4);
if (element.requestFullScreen) { //HTML W3C 提議
element.requestFullScreen();
} else if (element.msRequestFullscreen) { //IE11
element.msRequestFullScreen();
} else if (element.webkitRequestFullScreen) { //Webkit (works in Safari5.1 and Chrome 15)
element.webkitRequestFullScreen();
} else if (element.mozRequestFullScreen) { //Firefox (works in nightly)
element.mozRequestFullScreen();
}
// 退出全屏
if (element.requestFullScreen) {
document.exitFullscreen();
} else if (element.msRequestFullScreen) {
document.msExitFullscreen();
} else if (element.webkitRequestFullScreen) {
document.webkitCancelFullScreen();
} else if (element.mozRequestFullScreen) {
document.mozCancelFullScreen();
}
}
}
},
},
//標題
title: {
text: "2021分公司年度資金流水",
subtext: "11月份第四周",
left: 'center',
show: true,
padding: [10, 5]
},
//數據集
dataset: {
source: this.array, //引用data中的數據
},
//圖例
legend: {
orient: "horizontal",
top: '96%',
itemHeight: 9,
},
//X軸
xAxis: {
//類目軸
type: 'category',
//相對于默認位置的偏移
offset: 6,
name: '日期',
nameLocation: "end",
axisTick: {
show: true
}
},
//Y軸
yAxis: {
//數值軸
type: 'value',
name: '數量(萬元)'
},
series: [
{
type: 'bar',
//坐標軸顯示器的文本標簽
label: {
show: true,
position: 'top',
color: 'gray'
},
},
{
type: 'bar',
label: {
show: true,
position: 'top',
color: 'gray'
},
},
{
type: 'bar',
label: {
show: true,
position: 'top',
color: 'gray'
},
},
]
};
//顯示圖表
myEchart.setOption(option);
},
//餅圖
drawChart_pie() {
var myChart1 = this.$echarts.init(document.getElementById('pie'));
var option = {
title: {
text: '五大城市中公司主要業務量情況',
subtext: '2021年第一季度',
left: 'center',
padding: [10, 5]
},
//工具欄
toolbox: {
padding: [7, 11],
show: true,
feature: {
saveAsImage: {},
dataView: {}
}
},
//提示框組件
tooltip: {
trigger: 'item',
},
legend: {
orient: 'vertical',
left: '10',
top: '4'
},
series: [
{
name: '業務量:',
type: 'pie',
radius: '50%',
data: [
{value: 1048, name: '北京'},
{value: 735, name: '上海'},
{value: 580, name: '廣州'},
{value: 484, name: '深圳'},
{value: 300, name: '成都'}
],
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
},
}
]
};
myChart1.setOption(option);
},
//折線圖
drawChart_line() {
var myChart2 = this.$echarts.init(document.getElementById('line'));
var option = {
title: {
text: '股市走向',
left: '10',
top: '5'
},
//滑動條型縮放顯示
// dataZoom: {
// type: 'slider'
// },
toolbox: {
show: true,
padding: [7, 11],
feature: {
saveAsImage: {},
dataView: {}
}
},
tooltip: {
trigger: 'axis'
},
legend: {
data: ['A股', 'B股', 'C股', 'D股'],
top: '10'
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: {
type: 'category',
boundaryGap: false,
data: ['2011', '2012', '2013', '2014', '2015', '2016', '2017'],
axisLabel: {
rotate: 45,
margin: 11,
formatter: function (value, index) {
return value + '年'
}
}
},
yAxis: {
type: 'value',
axisLabel: {
formatter: function (value, index) {
if (value >= 1000) {
return value = value / 1000 + 'k';
} else {
return value;
}
}
}
},
series: [
{
name: 'A股',
type: 'line',
//數據堆疊
stack: 'Total',
data: [220, 182, 191, 234, 290, 330, 310],
},
{
name: 'B股',
type: 'line',
stack: 'Total',
data: [150, 232, 201, 154, 190, 330, 410]
},
{
name: 'C股',
type: 'line',
stack: 'Total',
data: [320, 332, 301, 334, 390, 330, 320]
},
{
name: 'D股',
type: 'line',
stack: 'Total',
data: [820, 932, 901, 934, 1290, 1330, 1320]
}
]
};
myChart2.setOption(option);
},
//實現拖拽
drag() {
var box = document.querySelector('#bar');
var starX = null;
var starY = null;
var left = null;
var top1 = null;
box.onmousedown = function (ev) {//給要移動的那個div加鼠標按下事件
ev = ev || window.event;//event做ie兼容
starX = ev.pageX;
starY = ev.pageY;
left = box.offsetLeft;//到父級的左側距離
top1 = box.offsetTop;//到父級的頂部距離
document.onmousemove = function (ev) {//給整個文檔加移動事件
ev = ev || window.event;
var dia = ev.pageX - starX;//鼠標現在的距離減去之前的距離 得到一個差值
var dib = ev.pageY - starY;
box.style.top = top1 + dib + 'px';//重新給box的頂部和left賦值
box.style.left = left + dia + 'px';
};
document.onmouseup = function () {
document.onmousemove = null;//解除綁定移動事件
document.onmouseup = null;//解除綁定抬起事件
};
console.log(starX, starY)
}
}
},
mounted() {
//調用方法
//畫圖
this.drawChart_bar();
this.drawChart_pie();
this.drawChart_line();
//拖拽
this.drag();
}
}
.main {
position: relative;
margin-top: -0.3rem;
}
.echarts {
display: flex;
justify-content: space-between;
}
#bar {
width: 50%;
height: 8rem;
background-color: #FFFFFF;
margin-top: 0.1rem;
position: absolute;
z-index: 1;
}
.echarts2 {
width: 49.5%;
height: 8rem;
margin-left: 50.5%;
margin-top: 0.1rem;
}
.echarts2 #pie {
width: 49.5%;
height: 3.95rem;
background-color: #FFFFFF;
margin-bottom: 0.1rem;
position: absolute;
}
.echarts2 #line {
width: 49.5%;
height: 3.95rem;
background-color: #FFFFFF;
position: absolute;
margin-top: 4.05rem;
}
Vue
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。