您好,登錄后才能下訂單哦!
這篇文章主要介紹了怎么使用Vue+Echart實(shí)現(xiàn)利用率表盤效果的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇怎么使用Vue+Echart實(shí)現(xiàn)利用率表盤效果文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。
里面對(duì)應(yīng)兩個(gè)圖片資源,panelBackground_red.png 和 panelBackground_green.png,請(qǐng)前往百度網(wǎng)盤進(jìn)行下載。如果喜歡其他顏色,可以使用.psd來(lái)修改導(dǎo)出就行。
在使用組件之前,記得引入echart組件,可以參考echart組件引入
<template> <!-- <div>占用率</div> --> <div id="customGaugeContainer" ref="panel" ></div> </template> <script> import * as echarts from 'echarts' var app = {}; var ROOT_PATH = 'https://echarts.apache.org/examples'; // var _panelImageURL = ROOT_PATH + '/data/asset/img/custom-gauge-panel.png'; var _panelImageURL = require("@/assets/panel/panelBackground_green.png"); var _animationDuration = 1000; var _animationDurationUpdate = 1000; var _animationEasingUpdate = 'quarticInOut'; //這個(gè)不改 var _valOnRadianMax = 100; //這個(gè)不改 var _pointerInnerRadius = 60; //外輪廓半徑 var _outerRadius = 110; //內(nèi)輪廓半徑 var _innerRadius = 100; //里面白色遠(yuǎn)的半徑 var _insidePanelRadius = 100; var _fontSize = 50; var _currentDataIndex = 0; var _shadowColor = '#20A53A'; var _textColor = '#20A53A'; var _shadowBlur = 20; export default { name: 'SmartSchedulingSystemCustomGauge', props: { rate: { type: Number }, timeChange: { type: Number } }, watch: { rate: { handler(newValue, oldValue) { // console.log("刷新表盤數(shù)據(jù)") // console.log("oldValue:" + oldValue) // console.log("newValue:" + newValue) // console.log("rate:" + this.rate) //刷新表盤數(shù)據(jù) this.setOptions(); }, deep: true }, }, data() { return { myChart: undefined, scheduledTask: undefined, }; }, mounted() { this.$nextTick(() => { this.initChart(); window.addEventListener('resize', this.myChart.resize()); // this.setScheduledTask(); }) }, methods: { initChart() { let dom = document.getElementById('customGaugeContainer'); let clientHeight = dom.clientHeight; // console.log("clientHeight:" + clientHeight) _outerRadius = (clientHeight / 2) * 0.9; _innerRadius = (clientHeight / 2) * 0.8; _insidePanelRadius = (clientHeight / 2) * 0.8; _fontSize = (clientHeight / 2) * 0.3; _shadowBlur = (clientHeight / 2) * 0.2; // this.myChart = echarts.init(dom, null, { // renderer: 'canvas', // useDirtyRect: false // }); this.myChart = echarts.init(this.$refs.panel); this.setOptions(); }, setOptions() { if (this.rate > 80) { _shadowColor = '#F33333'; _textColor = '#F33333'; _panelImageURL = require("@/assets/panel/panelBackground_red.png"); } else { _shadowColor = '#20A53A'; _textColor = '#20A53A'; _panelImageURL = require("@/assets/panel/panelBackground_green.png"); } let option = { animationEasing: _animationEasingUpdate, animationDuration: _animationDuration, animationDurationUpdate: _animationDurationUpdate, animationEasingUpdate: _animationEasingUpdate, //數(shù)據(jù)展示 dataset: { //100可以看成是百分比 source: [[1, this.rate]] }, tooltip: {}, angleAxis: { type: 'value', startAngle: 0, show: false, min: 0, max: _valOnRadianMax }, radiusAxis: { type: 'value', show: false }, polar: {}, series: [ { type: 'custom', coordinateSystem: 'polar', renderItem: renderItem } ] }; if (option && typeof option === 'object') { this.myChart.setOption(option); } }, /** * 設(shè)置定時(shí)任務(wù) */ setScheduledTask() { this.scheduledTask = setInterval(function () { console.log("rate:" + this.rate) }, 2000); } }, }; function renderItem(params, api) { var valOnRadian = api.value(1); var coords = api.coord([api.value(0), valOnRadian]); var polarEndRadian = coords[3]; var imageStyle = { image: _panelImageURL, x: params.coordSys.cx - _outerRadius, y: params.coordSys.cy - _outerRadius, width: _outerRadius * 2, height: _outerRadius * 2 }; return { type: 'group', children: [ { type: 'image', style: imageStyle, clipPath: { type: 'sector', shape: { cx: params.coordSys.cx, cy: params.coordSys.cy, r: _outerRadius, r0: _innerRadius, startAngle: 0, endAngle: -polarEndRadian, transition: 'endAngle', enterFrom: { endAngle: 0 } } } }, // { // type: 'image', // style: imageStyle, // clipPath: { // type: 'polygon', // shape: { // points: makePionterPoints(params, polarEndRadian) // }, // extra: { // polarEndRadian: polarEndRadian, // transition: 'polarEndRadian', // enterFrom: { polarEndRadian: 0 } // }, // during: function (apiDuring) { // apiDuring.setShape( // 'points', // makePionterPoints(params, apiDuring.getExtra('polarEndRadian')) // ); // } // } // }, //白色中心圓 { type: 'circle', shape: { cx: params.coordSys.cx, cy: params.coordSys.cy, r: _insidePanelRadius }, style: { fill: '#fff', shadowBlur: _shadowBlur, shadowOffsetX: 0, shadowOffsetY: 0, //輪廓陰影顏色 shadowColor: _shadowColor } }, { type: 'text', extra: { valOnRadian: valOnRadian, transition: 'valOnRadian', enterFrom: { valOnRadian: 0 } }, style: { text: makeText(valOnRadian), fontSize: _fontSize, fontWeight: 700, x: params.coordSys.cx, y: params.coordSys.cy, //字體顏色 fill: _textColor, align: 'center', verticalAlign: 'middle', enterFrom: { opacity: 0 } }, during: function (apiDuring) { apiDuring.setStyle( 'text', makeText(apiDuring.getExtra('valOnRadian')) ); } } ] }; } function convertToPolarPoint(renderItemParams, radius, radian) { return [ Math.cos(radian) * radius + renderItemParams.coordSys.cx, -Math.sin(radian) * radius + renderItemParams.coordSys.cy ]; } function makePionterPoints(renderItemParams, polarEndRadian) { return [ convertToPolarPoint(renderItemParams, _outerRadius, polarEndRadian), convertToPolarPoint( renderItemParams, _outerRadius, polarEndRadian + Math.PI * 0.03 ), convertToPolarPoint(renderItemParams, _pointerInnerRadius, polarEndRadian) ]; } function makeText(valOnRadian) { // Validate additive animation calc. if (valOnRadian < -10) { alert('illegal during val: ' + valOnRadian); } return ((valOnRadian / _valOnRadianMax) * 100).toFixed(1) + '%'; } </script> <style scoped> #customGaugeContainer { // height: calc(100% - 20px); height: 100%; } </style>
在頁(yè)面引入組件
使用組件
<customGauge :rate="server.jvm.usage"> </customGauge>
關(guān)于“怎么使用Vue+Echart實(shí)現(xiàn)利用率表盤效果”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“怎么使用Vue+Echart實(shí)現(xiàn)利用率表盤效果”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。