(上)Vue+Echarts構建可視化大數據平臺實戰項目分享(附源碼)

2021-02-24 懶人碼農

前言

分享之前我們先來普及一下什麼是數據可視化?數據可視化可以把數據從冰冷的數字轉換成圖形,揭示蘊含在數據中的規律和道理。數據可視化通俗來說就是:數據的展示、處理和分析。目的是藉助於圖形化手段,清晰有效地傳達與溝通信息。

那前端數據可視化又是什麼呢?前端數據可視化其實就是利用前端表現層的手段,以前端手段展示、處理和分析數據。前端因為H5的到來,使前端有了質的飛躍,也使前端數據可視化的飛速發展得到了契機。H5提供的canvas就是這一契機。它是前端利用JS製作在做前端數據可視化的利器,幾乎全部前端數據可視化工具都是基於其上做的。

簡而言之,前端數據可視化是數據可視化的發展也是促使前端發展的支柱。

接下來要實現數據可視化平臺酷屏展示效果,前端界出現了各種第三方開源庫:

Echarts(百度):

https://www.echartsjs.com/zh/index.html,

AntV(阿里):

https://antv.vision/zh,

Highcharts(國外公司):

https://www.highcharts.com.cn/demo/highcharts/,

D3.js(國外公司):

https://observablehq.com/@d3/gallery

以上列舉四種比較流行的圖表庫。但是,萬變不離其宗。

總的來說,所有的第三方庫都是基於這兩種瀏覽器圖形渲染技術實現的:Canvas和 SVG 。

SVGCanvas不依賴解析度依賴解析度支持事件處理器不支持事件處理器最適合帶有大型渲染區域的應用程式(如地圖)弱的文本渲染能力複雜度高會減慢渲染速度(任何過度使用 DOM 的應用都不快)能夠以 .png 或 .jpg 格式保存結果圖像不適合遊戲應用最適合圖像密集型的遊戲可以為某個元素附加 JavaScript 事件處理器。在 SVG 中,每個被繪製的圖形均被視為對象。一旦圖形被繪製完成,它就不會繼續得到瀏覽器的關注。如果其位置發生變化,那麼整個場景都需要重新繪製。

數據可視化利器對比

1、兼容性


Highcharts 兼容 IE6 及以上的所有主流瀏覽器,完美支持移動端縮放、手勢操作。

Echarts 兼容 IE6 及以上的所有主流瀏覽器,同樣支持移動端的縮放和手勢操作。

D3 兼容IE9 及以上的所有主流瀏覽器,對於移動端的兼容性也同上。

AntV 兼容IE9 及以上的所有主流瀏覽器,對於移動端的兼容性也同上。

 2、是否免費/開源


3、難易程度


Highcharts 基於SVG,方便自己定製,但圖表類型有限。

Echarts 基於Canvas,適用於數據量比較大的情況。

D3版本v3 基於SVG,方便自己定製;D3版本v4支持Canvas+SVG,如果計算比較密集,也可以選擇用Canvas。除此之外,D3圖表類型非常豐富,幾乎可以滿足所有開發需求,但代碼相對於以上兩個插件來說,會稍微難一點。

G 是 AntV 螞蟻金服旗下一款易用、高效、強大的 2D 可視化渲染引擎,提供 Canvas、SVG 等多種渲染方式的實現。

通過各種比較之後,我最終選擇基於Echarts進行開發,上手快。當然,如果技術夠硬,可以選擇D3.js等,學成後牛逼哄哄,非常適合用於為用戶制定個性化圖表,但更強的專業性也就意味著更高的學習成本,仁者見仁智者見智吧。

了解可視化相關設計

自己去百度搜索數據可視化設計,乍一看,設計主題都是偏深藍色調。科技感,酷炫,大屏展示,視覺衝擊感強。如圖:

看完這些,基本對大數據可視化的設計有所了解,沒有UI設計師,自己也懂一點設計得話,前端一樣可以愉快的玩耍。先上一波效果圖。

效果截圖

登錄界面

酷屏首頁組件庫

看了以上效果圖,都只是靜態的,還不過癮,直接線上體驗:

https://jackchen0120.github.io/vueDataV/

高端大氣上檔次,是我追求的目標。如果感覺還不錯的話,老鐵們是不是賞個點讚鼓勵一哈,作者才有動力繼續寫下去。好了,言歸正傳,想要快速做出酷炫大屏,讓人眼前一亮,就請接著往下看。

│  vue.config.js                      ├─public│      favicon.ico                    │      index.html                     └─src    │  App.vue                            │  main.js                            ├─assets    │  ├─iconfont                         │  ├─img                              │  ├─js    │  │      utils.js                    │  └─styles    │      │  base.scss                   │      │  common.scss                 │      └─fonts                        ├─components    │  │  index.js                        │  ├─bar3d                            │  ├─bgAnimation                      │  ├─cakeLinkage                      │  ├─circleNesting                    │  ├─circleRunway                     │  ├─colorfulArea                     │  ├─colorfulRadar                    │  ├─dynamicLine                      │  ├─dynamicList                      │  ├─flashCloud                       │  ├─gauge                            │  ├─modal                            │  ├─pyramid                          │  ├─pyramidTrend                     │  ├─rainbow                          │  ├─ringPie                          │  ├─ringPin                          │  ├─rotateColorful                   │  ├─scanRadius                       │  ├─scrollArc                        │  ├─seamless                         │  ├─sinan                            │  ├─staffMix                         │  ├─szBar                            │  ├─toast     │  │      index.js                    │  │      index.vue                   │  └─waterPolo    │          index.vue                  ├─router    │      index.js                       ├─store    │      index.js                       └─views            Home.vue                              Login.vue                 

技術棧

vue2.6

echarts4.7

axios

webpack

ES6

scss

css3

jquery

iconfont

功能模塊

登錄界面抖動

粒子動效

背景圖輪播

自定義全局模態框

自定義消息提示框

數字滾動效果

酷屏首頁組件庫

各種酷炫小部件

可視化面板布局

準備工作

windows 10系統

官網下載安裝 nodejs v10+

https://nodejs.org/zh-cn/

代碼編輯器工具 sublime text 3

搭建開發環境(此處非小白可以忽略)

1) 打開命令行窗口,輸入 node -v 查看,出現版本號說明已安裝成功,如下圖:

2) 使用以下命令安裝vue-cli3

npm install -g @vue/clinpm install -g @vue/cli@3.11.0yarn global add @vue/cli

3)安裝完成,檢查vue版本,如下圖:

4) vue-cli3 創建項目及運行

vue create woyouzhecd woyouzhenpm run serve

在瀏覽器地址欄輸入:http://localhost:8080/

5)開發配置

在使用vue-cli3腳手架創建項目後,因為webpack的配置均被隱藏,當你需要覆蓋原有的配置時,則需要在項目的根目錄下,新建vue.config.js文件,來配置新的配置如下(含註解):

module.exports = {    publicPath: process.env.NODE_ENV === "production" ? "/vueDataV/" : "/",     lintOnSave: false,     productionSourceMap: false,     devServer: {       port: 8081,       hotOnly: false,                                                         },  configureWebpack: {            externals: {       'jquery' : '$',       'echarts': 'echarts',       'axios' : 'axios'      }    }}

在配置文件vue.config.js中添加webpack的externals對象,把不需要打包的依賴庫(減少打包文件體積),直接按上面的方式寫入。然後在index.html文件中引入CDN即可,如下圖:

6) 公共樣式,圖片,字體,JS,統一存放在/src/assets/文件夾下,如下圖:

js文件夾裡面的utils.js文件的作用,如下圖:

作者偷懶只針對酷屏首頁組件庫會用到,通常按照UI設計師提供的數據可視化屏幕尺寸都是寬:1920px,高:1080px,所以上面的配置也按照這個尺寸進行屏幕縮放。後續會專門講數據可視化面板的合理布局。首頁引用如下圖:

iconfont文件夾存放圖標文件,可以直接去阿里巴巴矢量圖標庫(https://www.iconfont.cn/)查找下載所需要的圖標。

style文件夾存放base.scss(基本樣式)和common.scss(組件庫通用樣式),直接在main.js文件引入即可,如下圖:

功能設計和代碼實現

按照上面的步驟完成腳手架構建,把需要的axios、vue-router、echarts、scss、jquery等依賴庫引入和安裝配置好,準備開始上路。

登錄界面主要功能包含:背景圖輪播、粒子動效、登錄框抖動、自定義消息提示框等等。

1. 背景圖輪播

利用css3動畫屬性animation實現輪播背景圖的路徑,使這個動畫無限循環下去,以實現背景圖自動輪播的效果。背景圖輪播功能已封裝註冊全局小組件在components/bgAnimation目錄文件,直接上代碼:

<template>  <ul class="slide-box">    <li></li>    <li></li>    <li></li>    <li></li>  </ul></template>
<script>export default { name: "bgAnimation"};</script>
<style lang="scss">.slide-box { position: fixed; width: 100%; height: 100%; background: rgba(0, 134, 179, .5); top: 0; left: 0; z-index: 0; li { width: 100%; height: 100%; position: absolute; top: 0px; left: 0px; color: transparent; background-size: cover; background-position: 50% 50%; background-repeat: none; opacity: 0; z-index: 0; -webkit-backface-visibility: hidden; -webkit-animation: imgAnimation 48s linear infinite 0s; -moz-animation: imgAnimation 48s linear infinite 0s; -o-animation: imgAnimation 48s linear infinite 0s; -ms-animation: imgAnimation 48s linear infinite 0s; animation: imgAnimation 48s linear infinite 0s;
&:nth-child(1) { background-image: url(../../assets/img/bg-4.jpg); } &:nth-child(2) { background-image: url(../../assets/img/bg-5.jpg); -webkit-animation-delay: 12s; -moz-animation-delay: 12s; -o-animation-delay: 12s; -ms-animation-delay: 12s; animation-delay: 12s; } &:nth-child(3) { background-image: url(../../assets/img/bg-2.jpg); -webkit-animation-delay: 24s; -moz-animation-delay: 24s; -o-animation-delay: 24s; -ms-animation-delay: 24s; animation-delay: 24s; } &:nth-child(4) { background-image: url(../../assets/img/bg-4.jpg); animation-delay: 36s; } }}@-webkit-keyframes imgAnimation { 0% { opacity: 0; -webkit-animation-timing-function: ease-in; } 8% { opacity: 1; -webkit-transform: scale(1.1); -webkit-animation-timing-function: ease-out; } 17% { opacity: 1; -webkit-transform: scale(1.2); } 25% { opacity: 0; -webkit-transform: scale(1.3); } 100% { opacity: 0; }}@keyframes imgAnimation { 0% { opacity: 0; animation-timing-function: ease-in; } 8% { opacity: 1; transform: scale(1.1); animation-timing-function: ease-out; } 17% { opacity: 1; transform: scale(1.2); } 25% { opacity: 0; transform: scale(1.3); } 100% { opacity: 0; }}</style>

如果對animation屬性不熟,可以參考這個網站教程(https://www.runoob.com/cssref/css3-pr-animation.html)。

2. 粒子動效 

點擊查看效果地址:

https://jackchen0120.github.io/vueDataV/

這種粒子背景特效在Vue框架中實現不難,因為已經有大神幫我們做好了,我們只需引入到自己的項目中即可,作者推薦vue-particles插件,簡單看一下使用,具體用法可以移步vue-particles官網(https://vue-particles.netlify.app/)。

<vue-particles   color="#6495ED"  :particleOpacity="0.7"  :particlesNumber="80"  shapeType="circle"  :particleSize="4"  linesColor="#6495ED"  :linesWidth="1"  :lineLinked="true"  :lineOpacity="0.6"  :linesDistance="150"  :moveSpeed="3"  :hoverEffect="true"  hoverMode="grab"  :clickEffect="true"  clickMode="push"></vue-particles>

3. 自定義全局消息提示框

消息彈框組件,默認3秒後自動關閉,可設置info/success/warning/error類型。效果圖:

消息彈框功能已封裝註冊全局小組件在components/toast目錄文件,代碼如下:

<template>  <transition name="fade">    <div class="toast-container" v-if="visible">        <div class="toast" :class="type">        <div class="content">          <i class="iconfont" :class="'icon-' + type"></i>          <span>{{ content }}</span>        </div>        <i v-if="hasClose" class="iconfont icon-close close" @click="visible = false"></i>      </div>    </div>  </transition></template> <script>export default {  name: 'Toast',  data() {    return {        content: '',      time: 3000,      visible: false,      type: 'error',        hasClose: false,         }  },  mounted() {    this.close();  },  methods: {        close () {      setTimeout(() =>{        this.visible = false;      }, this.time);    }  }}</script>

在components/toast/index.js目錄文件中註冊全局組件,如下圖:

在main.js中全局引用,如下圖:

在登錄模板界面調用即可,如下圖:

參數名類型說明contentString內容time  Number 消失時間,默認3秒後消失type  String info/success/warning/error,默認infohasClose Boolean 是否含關閉按鈕,默認false

最後(未完待續)

由於時間關係,文章寫的倉促,難免會有些問題或BUG出現,願意接受批評和指正。此次實戰項目分享內容分為上下兩篇文章,下一篇要分享的內容大概有:自定義全局模態框、首頁設計布局、數字滾動、某個酷炫小部件開發等。

下一篇最後會簡單講講大數據展示公司品牌介紹實例

如果感覺還不錯的話,老鐵們是不是來github裡賞個★Star鼓勵一哈。後續會持續更新和優化,也期待大家的交流。

附上源碼地址:https://github.com/jackchen0120/vueDataV

從未停止發表一些實戰型項目的前端技術文章,分享讓更多小夥伴不花錢就能學到前端實戰經驗,如:

SPA單頁面開發H5移動端和後臺管理系統

多頁面應用開發H5移動端和後臺管理系統

小程序開發實踐

大廠前端性能優化解決方案

基於Vuejs大數據可視化大屏

react native開發APP應用項目

區塊鏈相關項目開發

重要通知

  懶人碼農專注於分享前端IT乾貨,最新前端技術。囊括JS,HTML5,CSS3,Vue.js,React,Angular前端框架,前端項目實戰,工具資源,視頻教程,學習經驗,面試技巧。與前端大牛一起交流學習成長,掌握前沿最新IT技術。

相關焦點

  • 前後端通吃,vue大全Mark一下
    vue-fullcalendar ★313 - 基於vue.js的全日曆組件vue-html5-editor ★303 - html5所見即所得編輯器vue-upload-component ★298 - Vuejs文件上傳組件DataVisualization ★298 - 數據可視化vue-tables-2 ★291 - 顯示數據的
  • vue 官方的構建工具 vue-cli 以及安裝方式【22】
    具體如下:(1) .功能豐富:支持 Babel、Ts、ESLint、PostCss 等;(2) .易於擴展:有很多插件和常用的構建解決方案;(3) .圖形界面:不但可以通過命令構建項目,還可以通過 Web 界面構建;(4) .封裝的 Webpack:簡化各種命令和配置,實現零配置開發;(5) .快速創建:便捷快速搭建 Vue 項目
  • vue.js-使用vue-cli3快速創建項目
    vue-cli作為vue的腳手架,集成了webpack環境及主要依賴,對於項目的搭建、打包、維護管理都非常方便。
  • 矢量大數據空間分析、大數據可視化...GIS結合大數據大千世界深度洞察
    「世界上80%的信息都與地理空間位置相關」,GIS與大數據的結合催生GIS從一個簡單的、基於地理空間的信息管理、統計、分析系統向高級的、善於處理地理大數據並能滿足決策者各種需求的智能系統轉化。地理大數據除了具備普通大數據的「5V」特徵,還具備時空屬性,其粒度更細、密度更高、範圍更大,如何從地理大數據中挖掘更大價值以服務於國計民生已成為GIS平臺攻關制高點!
  • 「Vue實戰」武裝你的項目
    本文項目基於Vue-Cli3,想知道如何正確搭建請看我之前的文章:「Vue實踐」項目升級vue-cli3的正確姿勢
  • Django 3 + Vue.js 前後端分離Web開發實戰
    用戶在瀏覽器上發送請求,伺服器端接收到請求,根據 Header 中的 token 進行用戶鑑權,從資料庫取出數據,處理後將結果數據填入 HTML 模板,返回給瀏覽器,瀏覽器將 HTML 展現給用戶。1、創建Django項目,採用Pycharm或者命令行創建皆可。此處,以命令行方式作為演示,項目名為django_vue。(venv) ➜ django-admin startproject django_vue2. Django項目創建完成後,目錄結構如下所示。
  • 可能是目前最完整的前端框架 Vue.js 全面介紹
    Vue.js 是一個JavaScriptMVVM庫,是一套構建用戶界面的漸進式框架。它是以數據驅動和組件化的思想構建的,採用自底向上增量開發的設計。相比於Angular.js,Vue.js提供了更加簡潔、更易於理解的API,使得我們能夠快速地上手並使用Vue.js。
  • 可視化:前端人的未來
    作為前端領域中一個幾乎不用寫網頁的特殊分支,可視化利用計算機的圖形學和圖像處理技術,將數據轉換成圖形或圖像,在屏幕上顯示出來,並進行交互處理。 它可以實現很多傳統 Web 網頁無法實現的效果,應用領域也非常廣泛,除了前面說過的疫情地圖以外,還有淘寶「雙 11」的可視化大屏、平臺的年度帳單、企業級應用中的態勢感知和指揮調度大屏,甚至是國家大力推廣的智慧城市、智慧生活等等。
  • 編程開發 | 171128DUBBO分布式項目實戰 數據交換平臺項目+SpringMVC+maven+dubbo項目+商城系統
    ==========課程目錄==========<dubbo分布式項目實戰>├<01、數據交換平臺>│  ├單點登錄17.mp4│  ├單點登錄18.mp4│  ├單點登錄19.mp4│  ├單點登錄20.mp4│  ├單點登錄21.mp4│  ├單點登錄22.mp4│  ├單點登錄23.mp4│  ├分布式實戰項目1.mp4│  ├分布式實戰項目10.mp4│  ├分布式實戰項目11.mp4│  ├分布式實戰項目12.mp4│  ├分布式實戰項目13.mp4
  • SendCloud 全明星第十期:大數據可視化管理平臺 Cloudinsight
    Cloudinsight 簡介Cloudinsight是一個大數據可視化管理平臺。
  • 大平臺、大系統、大數據,「網際網路+」構建「生態環境最強大腦」
    「構建『生態環境最強大腦』,生態環境信息化進入基於即時、全量、全網數據的『智能+生態環境』治理創新時代。」在近日舉辦的中國環境保護產業協會環境網際網路+專委會成立大會暨首屆環境網際網路+高峰論壇上,生態環境部信息中心副主任楊子江透露,將繼承已有生態環境信息化各項規劃和方案,充分利用現有信息基礎設施、業務系統、數據等資源,按照統一的生態環境信息資源目錄,分級分類搭建生態環境資料庫,以生態環境業務專網為依託,通過生態環境數據共享服務平臺,快速實現跨地區、跨部門、跨層級數據交換共享,以數據為紐帶實現生態環境監管工作的全國大協同
  • 太強了,從 0 到 1 搭建 vue-cli
    雖然這個構建過程非常簡便快速,但是我們還是需要對這些現代工具如何與 vue 進行融合進行掌握,這樣後期的新增擴展,升級部署,解決問題甚至性能調優才得以快速實現。所以本篇文章致力於自行構建一個和vue-cli 生成的項目體驗幾乎一致的步驟,並細化每一個步驟的實現方式。
  • 數據中臺和大數據平臺有啥不一樣?| 我的數據中臺建設之思考
    數據中臺和大數據平臺有啥不一樣?相信是很多人的困惑。ITPUB技術棧在疫情期間推出一系列線上沙龍活動主題包含大數據應用架構、存儲與計算、數據治理與數據中臺的建設、雲計算的實踐與探索,本期邀請到了IT老兵王保強,結合自身經驗探討大數據平臺和數據中臺的建設之道。
  • Vue.js:輕量高效的前端組件化方案
    當時在項目中使用了一段時間的Angular,在感嘆數據綁定帶來生產力提升的同時,我也感到Angular的API設計過於繁瑣,使得學習曲線頗為陡峭。出於對Angular數據綁定原理的好奇,我開始 「造輪子」,自己實現了一個非常粗糙的、基於依賴收集的數據綁定庫。這就是Vue.js的前身。同時在實際開發中,我發現用戶界面完全可以用嵌套的組件樹來描述,而一個組件恰恰可以對應MVVM中的ViewModel。
  • Vue項目使用攔截器和JWT驗證(完整案例)
    (有關代碼的解釋說明已在代碼中注釋)案例使用攔截器並封裝axios新建一個 Vue 項目 (vue create demo)刪去不必要的文件和代碼,經典化代碼/views/Profile.vue') }\]因為項目中需要用到樣式什麼的,這裡我引入了iView,main.js代碼:import Vue from 'vue'import App from './App.vue'import router from '.
  • IOT:如何可視化傳感器數據
    今天我們就來介紹一個Raspberry Pi IoT項目,這次教程將建立一個物聯網系統,該系統會使用InfluxDB,MQTT和Grafana監視傳感器。換句話說,我們將基於Grafana構建儀錶板,從而可視化傳感器獲取的數據。這樣,InfluxDB存儲傳感器所讀取的值。所有系統都將使用MQTT交換數據。下圖更好地描述了整個Raspberry Pi IoT項目。
  • Vue.js輪播庫熱門精選
    這些都需要時間來構建,而且極有可能我們可以更好地利用這些時間做其他事情。在這篇文章中,我們將看看Vue.js的一些輪播圖庫,讓我們的生活變得更輕鬆,並讓我們拿回一些寶貴的時間。顧名思義,slider-item 存放的是輪播項目。我們還可以更改樣式。
  • 如何設計實時數據平臺(下篇)
    (RTDP,Real-time Data Platform)是一個重要且常見的大數據基礎設施平臺。在技術篇裡,我們則會推薦整體技術組件選型;對每個技術組件做出簡單介紹,尤其對我們抽象並實現的四個技術平臺(統一數據採集平臺、統一流式處理平臺、統一計算服務平臺、統一數據可視化平臺)著重介紹設計思路;對Pipeline端到端切面話題進行探討,包括功能整合、數據管理、數據安全等。