1. 程式人生 > >vue實現一個動效柱狀圖

vue實現一個動效柱狀圖

接手了一個需求的時候,其中有個 UI圖是這樣的:

這裡寫圖片描述

按照 PM本來的意思,這張圖中只有那幾個數字是從介面獲取的,而且從介面獲取到的每項數字的值,與目前標註的數字相差不會超過 10%,所以柱狀圖的條形高度不用管,直接一張圖片靜態的就行了,這確實很省事,三下五除二就弄完。

不過,作為一個老(xian)實(de)正(dan)直(teng)的程式設計師,怎麼可以容忍弄虛作假呢,我心中默默計算了下,用程式碼把這張圖畫出來也要不了多長時間,不會耽誤專案進度的,於是開搞。

首先,先把圖拆解成幾份可以用程式碼畫出來的圖形,如下:

這裡寫圖片描述這裡寫圖片描述

  1. 柱狀圖形,就是圓角長方形,豎直紅色柱與豎直紅色柱之間的空白,也是一個豎直的圓角長方形,只不過是透明的,作用是底部構建圓角
  2. 底部的基座,是一個水平長方形,只不過這個長方形除了看到的那一部分紅色外,還有z-index大於紅色豎直長方形、小於透明柱狀上半部分,用於遮掩紅色柱底部與圓角透明柱底部出現的空白
  3. 因為底部基座的高度其實比視覺上第一眼看過去更高的,所以無法使用 border-radius屬性產生圓角,否則就露餡了,因而在底部基座的最左邊和最右邊,還各有一個小的圓角長方形,用於產生圓角讓基座的兩邊看起來圓滑

弄清楚了上述幾點後,樣式就比較好寫了

然後就是各個豎直紅色柱的高度計算。

這也很簡單,給最高的紅色柱定一個高度,其他紅色柱以這個最高的紅色柱為基準計算高度

例如,最高紅色柱定為 200px,最高紅色柱的數字值為 987

,則每 1個數值對應的 px高度為 200px / 1000,第二根紅色柱的數字值為 230,則其高度就為 230 * (200px / 1000)

這樣,就能計算出所有紅色柱對應的高度了

至於如何讓紅色柱的高度從 0動態增長到該有的高度,只需要使用一個 CSS3transition屬性即可,最開始時將所有紅色柱的高度設為 0,然後再使用 js將高度設為該有的值就 ok

最終實現的效果如下:

這裡寫圖片描述

本文所實現動畫的可執行程式碼已經放到 Github了,程式碼的註釋算是比較清晰的,有興趣的可以自行下載執行。

相關推薦

vue實現一個

接手了一個需求的時候,其中有個 UI圖是這樣的: 按照 PM本來的意思,這張圖中只有那幾個數字是從介面獲取的,而且從介面獲取到的每項數字的值,與目前標註的數字相差不會超過 10%,所以柱狀圖的條形高度不用管,直接一張圖片靜態的就行了,這確實很省事,三下五除

ECharts的學習(一):製作一個簡單的

<!DOCTYPE html> <html> <head> <meta charset="utf-8"><meta na

vue 中使用vue-echarts-v3編寫chart,動態展示資料

效果如下 需求: 1、縱座標為數字,並且動態變化 2、柱狀圖頂部展示內容 3、滑鼠移動到柱狀圖展示內容 4、圖表要根據查詢結果動態展示 開始: <!-- 郵件推送圖示分析 --> <template> <div>

vue中實習ECharts的

<!DOCTYPE html><html style="height: 100%"><!--50%半屏,100%全屏--><head><meta charset="utf-8"><title>柱狀圖<

炫酷的運動統計

要用到柱狀圖,第一時間想到去echart看看示例扒一套程式碼下來。看了官方教程後感覺不太適合本專案,考慮後覺得自己動手寫個圖示比較省事而且不用引包。那就開始吧! 柱狀圖 滾動圖表首先得有一些柱子呀,那我們就來早柱子,這些都是個寬度相等,高度按比例*設定好的最高高度的柱子。通過flex

用echarts實現一個(前後臺原始碼)

  後臺程式碼 -------------------------controller------------------------------------- /**      * <p>人員結構-政治面貌</

標插件--jqplot實現及餅,表盤演示樣例

itl nbsp left 柱狀圖 draw ted ner ann name 柱狀圖 在jqPlot圖表插件使用說明(一)中,我們已經能夠通過jqPlot繪制出比較簡單的線形圖。通過查看源碼。我們也能夠看出,線形圖是jqPlot默認的圖表類型:

ECharts 報表事件聯動系列三:,餅實現聯動

餅狀圖 img and int js函數 radius func get 執行 源碼如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type

elasticsearch時間聚合java實現

需求:統計每天有多少條資料,以及某欄位的平均值。 1. 使用DateHistogramAggregationBuilder按天統計,再嵌入aggs取平均值。 如果要對結果進行排序,在 AggregationBuilders 加上 .order(Histogram.Order.COUN

實現與條形的結合,MPAndroidChart的簡單使用

先貼效果圖: 這種樣式的統計表格也是比較常用的,下面直接貼程式碼: public class ChartActivity extends BaseActivity { @BindView(R.id.chart1) MyCombinedChart mChart1;//完成

SSM框架下實現

和前面的餅圖不一樣,我的柱狀圖實現在ajax中使用了陣列,只需要將對應的值取出來(而不需要關心其他的值是否為空)。就要簡單一點,使用普通的Mapper.xml就可以應付。話不多說,上碼: 1. Mapper.xml和Mapper.java: xml: <!-- 統計男女人數 -->

vue專案中使用Echarts 動態更改圖表資料 , Vue 折線等圖表動態重新整理 ,

問題:在vue元件中,用echarts外掛 動態獲取、修改圖表資料 解決:已解決! 第一步:開啟cmd命令視窗 安裝echarts依賴 安裝:npm install echarts -S 第二步:在main.js中全域性引入   //引入echarts的圖表外掛

echarts 的選中模式實現-被選中變色和再次選中為取消變色

title sele alt hang arc 技術 etop code mage 方法: 1 function barCharShow(curr_dim,divId,result_data){ 2 mutilDim(curr_dim);//維度信息 3

d3.js(v5.7)完整地畫一個

img edi http 代碼 坐標 不能 畫布 分享 ueditor 一、首先定義畫布大小以及繪畫區域的位置(總不能頂著屏幕邊沿畫吧) 代碼: 圖示: 二、橫、縱向坐標軸 代碼: 圖示:

多系列php動態實現(ec)

<?php require_once 'data.php'; $arr1=$a->sum('answer','ask_id=1'); $arr2=$a->sum('answer','ask_id=2'); $arr3=$a->sum('answer','ask_id=3');

【Echarts】簡單實現——第一個實現(在後臺動態獲取資料)

  第一次接觸這個東西,感覺還有點濛濛的。經過兩天的努力終於搞明白。下面我用自己的方式實現以下,方便大家理解。   下面是我使用一個簡單的mvc框架來實現這個demo。 效果圖: 步驟: 1、新建一個mvc框架的專案。 2、新建控制器:EchartsBa

D3.js實現帶動畫效果的

<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <meta name="viewport" content

Vue+echart折線

先執行 npm i echarts -s   命令 在頁面中 匯入  import echarts from 'echarts'; 資料格式   ajax請求回來後(vm=this) 把資料賦值到圖表上,後在呼叫一次圖表的方法。由於資料是非同步載入的

echarts畫一個折現/混合

上程式碼: myChart=echarts.init(document.getElementById('gaikuangDiv')); option={ tooltip

利用Echarts實現堆疊

最近在開發公司的專案過程中遇到一個有關柱狀圖的問題,需要實現堆疊的柱狀圖,也就是一個柱體中可以允許幾種類別的元素,如下圖所示: 要完成這個功能首先要下載echarts.js這個外掛,這個網上一找一大堆,下載完成後將這個js放在你專案的某個資料夾下,並且引用它:<sc