zoukankan      html  css  js  c++  java
  • vue Echarts帧动画

    vue Echarts帧动画

    1.效果如下:

    2.源码如下:

      1 <template>
      2   <div class="chart"></div>
      3 </template>
      4 <script>
      5 import Bus from "@/utils/bus.js";
      6 import { debounce } from "@/utils";
      7 
      8 export default {
      9   name: "echarts2",
     10   data() {
     11     let initdata = 30 + Math.random().toFixed(4) * 4;
     12     let barbaldata = [];
     13     let ylinedata = [];
     14     let xdata = [];
     15     for (var i = 0; i < 50; i++) {
     16       barbaldata.push(0);
     17       ylinedata.push(initdata);
     18       xdata.push(i);
     19     }
     20     barbaldata.splice(
     21       barbaldata.length - 1,
     22       1,
     23       ylinedata[ylinedata.length - 1]
     24     );
     25     return {
     26       autoResize: {
     27         type: Boolean,
     28         default: true
     29       },
     30       chart: null,
     31       sidebarElm: null,
     32       chartData: { barbaldata, ylinedata, xdata }
     33     };
     34   },
     35 
     36   watch: {
     37     chartData: {
     38       deep: true,
     39       //immediate:true,
     40       handler(val) {
     41         this.drawEcharts();
     42       }
     43     }
     44   },
     45   mounted() {
     46     Bus.$on("ToEcharts", e => {
     47       this.chartData.xdata.shift();
     48       this.chartData.ylinedata.shift();
     49       this.chartData.xdata.push(e);
     50       this.chartData.ylinedata.push(e);
     51       this.chartData.barbaldata.splice(
     52         this.chartData.barbaldata.length - 1,
     53         1,
     54         e
     55       );
     56     });
     57 
     58     this.resetSizefun();
     59   },
     60   beforeDestroy() {
     61     if (!this.chart) {
     62       return;
     63     }
     64     if (this.autoResize) {
     65       window.removeEventListener("resize", this.__resizeHandler);
     66     }
     67 
     68     this.sidebarElm &&
     69       this.sidebarElm.removeEventListener(
     70         "transitionend",
     71         this.sidebarResizeHandler
     72       );
     73 
     74     this.chart.dispose();
     75     this.chart = null;
     76   },
     77   methods: {
     78     drawEcharts() {
     79       this.$nextTick(() => {
     80         this.initChart();
     81       });
     82     },
     83     initChart() {
     84       this.chart = this.$echarts.init(this.$el, "macarons");
     85       this.chart.clear();
     86       this.setOptions(this.chartData);
     87     },
     88 
     89     setOptions(chartData) {
     90       this.chart.setOption({
     91         backgroundColor: "#242424",
     92         grid: {
     93           top: "60",
     94           bottom: "20",
     95           right: "60",
     96           left: "60"
     97         },
     98         animation: false,
     99         tooltip: {
    100           trigger: "axis",
    101           show: false,
    102           axisPointer: {
    103             type: "cross"
    104           }
    105         },
    106 
    107         xAxis: {
    108           type: "category",
    109           boundaryGap: false,
    110           splitLine: { show: false },
    111           axisLine: {
    112             show: false
    113           },
    114           axisLabel: {
    115             show: false
    116           },
    117           axisTick: {
    118             show: false
    119           },
    120           data: chartData.xdata
    121         },
    122         yAxis: {
    123           type: "value",
    124 
    125           axisLabel: {
    126             show: false,
    127             formatter: "{value} "
    128           },
    129           axisPointer: {
    130             snap: true
    131           },
    132           splitLine: { show: false },
    133           axisLine: {
    134             show: false
    135           },
    136           axisTick: {
    137             show: false
    138           },
    139           connectNulls: true
    140         },
    141         series: [
    142           {
    143             data: chartData.ylinedata,
    144             type: "line",
    145             animation: false,
    146             smooth: true,
    147             symbol: "none",
    148             lineStyle: {
    149                2,
    150               color: {
    151                 type: "linear",
    152                 colorStops: [
    153                   {
    154                     offset: 0,
    155                     color: "#D575C2", // 0% 处的颜色,
    156                     transition: 2
    157                   },
    158                   {
    159                     offset: 0.66,
    160                     color: "#D575C2", // 66% 处的颜色
    161                     transition: 2
    162                   },
    163                   {
    164                     offset: 1,
    165                     color: "#fff", // 100% 处的颜色
    166                     transition: 2
    167                   }
    168                 ],
    169                 opacity: 0.4,
    170                 globalCoord: false // 缺省为 false
    171               }
    172             },
    173              4
    174           },
    175 
    176           {
    177             type: "bar",
    178             data: chartData.barbaldata,
    179             itemStyle: {
    180               normal: {
    181                 color:"#D575C2",
    182                  opacity: 0.8,
    183               }
    184             },
    185             barWidth: 2,
    186             animation: false,
    187             markPoint: {
    188               animation: false,
    189               symbol: "circle",
    190               data: [{ type: "max" }],
    191               symbolSize: 10,
    192               itemStyle: {
    193                 normal: {
    194                   color: "#fff",
    195                   borderColor: "#D575C2",
    196                   borderWidth: "2",
    197                   label: {
    198                     show: false
    199                   }
    200                 }
    201               }
    202             }
    203           }
    204         ]
    205       });
    206     },
    207     sidebarResizeHandler(e) {
    208       if (e.propertyName === "width") {
    209         this.__resizeHandler();
    210       }
    211     },
    212     //窗口改变执行方法
    213     resetSizefun() {
    214       if (this.autoResize) {
    215         this.__resizeHandler = debounce(() => {
    216           if (this.chart) {
    217             this.chart.resize();
    218           }
    219         }, 100);
    220         window.addEventListener("resize", this.__resizeHandler);
    221       }
    222 
    223       // 监听侧边栏的变化
    224       this.sidebarElm = document.getElementsByClassName("sidebar-container")[0];
    225       this.sidebarElm &&
    226         this.sidebarElm.addEventListener(
    227           "transitionend",
    228           this.sidebarResizeHandler
    229         );
    230     }
    231   }
    232 };
    233 </script>
    234 <style lang="scss" scoped>
    235 .chart {
    236    100%;
    237   height: 428px;
    238 }
    239 </style>
    View Code
  • 相关阅读:
    lua 函数调用1 -- 闭包详解和C调用
    lua API 小记2
    Lua API 小记1
    unity3d开发环境配置
    Hash表
    如何优化Cocos2d-X游戏的内存
    openGL光源概念
    Cocos2D-X屏幕适配新解
    Lua脚本在C++下的舞步
    lua table操作实例详解
  • 原文地址:https://www.cnblogs.com/volodya/p/14231285.html
Copyright © 2011-2022 走看看