<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
總體效果如圖
SellerPage.vue
<!--針對於/sellerpage 這條路徑顯示 測試顯示元件--> <template> <div class="comP1"> <Seller></Seller> </div> </template> <script> import Seller from "@/components/Seller"; export default { name: "SellerPage", components:{Seller} } </script> <style scoped> </style>
Seller.vue
<!-- 顯示商家銷量統計的圖表 --> <template> <div class="comP2" ref="seller_1"></div> </template> <script> export default { data () { return {} }, methods: {} } </script> <style lang="less" scoped> </style>
接下來就在 Seller.vue 搞事情了
在mounted生命週期中初始化 echartsInstance 物件
因為在元件掛載到頁面上 echarts 才能找到具體的DOM渲染
methods 裡定義 initChart 方法this.$refs.seller_1 找到具體盒子
this.theme 主題 來自於 Vuex 使用對映快捷引入
import {mapState} from "vuex"; computed:{ ...mapState(['theme']) },
然後就是設定設定項 在之前的基礎都有講到過
新增了柱狀圖漸變設定 可以詳看註釋
滑鼠移入和移出時間 用來停止和開啟定時器 後面會用到
methods:{ // 初始化echarts 範例物件 initChart(){ this.chartsInstance = this.$echarts.init(this.$refs.seller_1,this.theme) const initOption = { title:{ text:'▎銷售業績統計', left:20, top:15 }, grid:{ top: '24%', left: '3%', right:'6%', bottom:'3%', containLabel: true // 距離是包含座標軸上的文字 }, xAxis:{ type:'value', }, yAxis:{ type: 'category', }, tooltip:{ trigger:'axis', axisPointer:{ type:'line', z:0, lineStyle:{ color:'#2d3443' } } }, series:[ { type:'bar', // 柱狀圖 label:{ show:true,// 顯示柱內數值 position:'right',// 數值顯示位置 textStyle: { color:'#fff'// 數值顯示顏色 } }, itemStyle:{ // 設定漸變 x1,y1,x2,y2(指明漸變的方向) [{指明不同百分比下顏色的值}] color:new this.$echarts.graphic.LinearGradient(0,0,1,0,[ { offset:0, color:'#5052ee' }, { offset: 1, color: '#ab6ee5' } ]) } }, ] } this.chartsInstance.setOption(initOption) // 對圖表進行 滑鼠移入移出 事件的監聽 this.chartsInstance.on('mouseover',()=>{ clearInterval(this.timerID) }) this.chartsInstance.on('mouseout',()=>{ this.startInterval() }) }, }
使用到的data:
data(){ return{ chartsInstance:null, 圖表的範例物件 初始化後賦值給它 allData:null, 請求過來的資料 currentPage:1, 當前頁碼 定時器進行改變 來擷取哪些資料展示 totalPage:0, 總頁數 timerID:null 定時器的ID 用於啟停 } },
直接使用 註冊的 axios =>$http.get 來獲取 並通過 async await 簡化 解構出來
進行 sort 排序操作
計算出 每頁顯示5條資訊的情況下 總頁數是多少 能被5整除就直接用 整除不了就再加一頁
async getData(){ const {data:res} = await this.$http.get('seller') this.allData = res // 對資料進行排序 this.allData.sort((a,b) =>{ return a.value - b.value // 從小到大排序 }) // 每五個資料 顯示一頁 this.totalPage = this.allData.length % 5 === 0 ? this.allData.length / 5 : Math.floor(this.allData.length / 5) + 1 this.updateChart() this.startInterval() }
資料和頁碼轉存到 data 裡了 可以更新設定 把圖表渲染出來
當期頁碼預設是1 就擷取 0-5的索引
在使用 map 生成新的陣列 用於 x軸 和 y軸
最後更新設定項 設定項會自動整合
// 更新圖表 updateChart(){ const start = (this.currentPage - 1) * 5 const end = this. currentPage * 5 const showData = this.allData.slice(start,end) // slice 擷取 不包括 end const sellerNames = showData.map((item) =>{ return item.name }) const sellerValues = showData.map((item) =>{ return item.value }) const dataOption = { yAxis:{data:sellerNames}, series:[{data:sellerValues}] } this.chartsInstance.setOption(dataOption) },
當第一頁的資料展示出來時就可以開啟定時器了
開始之前先清除之前的定時器(來回切換頁面後 回到最初的資料)
頁碼累計相加 到最大值再返回到1
改變 當前頁的同時 呼叫更新圖表資料的方法
滑鼠移入移出 啟停定時器的方法 在註冊範例的時候已經新增
// 開啟定時器 startInterval(){ if (this.timerID){ clearInterval(this.timerID) } this.timerID = setInterval(()=>{ this.currentPage++ if (this.currentPage > this.totalPage){ this.currentPage = 1 } this.updateChart() },3600) },
小細節
xAxis:{ type:'value', // 細節處理 固定x軸的最大值 max:this.allData[this.allData.length -1].value },
自己定義一個 合適 簡易的 rem :當前視窗柵格化100份 * 3.6
根據這個資料 設定 標題大小 提示文字大小 柱狀圖的寬度和 圓角尺寸
初始化頁面時 呼叫一次 之後 跟隨視窗事件呼叫
mounted() { window.addEventListener('resize',this.screenAdapter) this.screenAdapter() },
// 當瀏覽器寬度發生變化時 screenAdapter(){ const titleFontSize = this.$refs.seller_1.offsetWidth / 100 * 3.6 // 解析度改變時更新的設定 const adapterOption = { title:{ textStyle:{ fontSize: titleFontSize } }, tooltip:{ axisPointer:{ lineStyle:{ width:titleFontSize, } } }, series:[ { type:'bar', // 柱狀圖 barWidth:titleFontSize,// 柱狀寬度 itemStyle:{ barBorderRadius:[0,titleFontSize/2,titleFontSize/2,0],// 柱狀的圓角 } }, ] } this.chartsInstance.setOption(adapterOption) this.chartsInstance.resize() }
到此這篇關於Vue echarts範例專案商家銷量統計圖實現詳解的文章就介紹到這了,更多相關Vue 銷量統計圖內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45