zoukankan      html  css  js  c++  java
  • ngx-echarts响应式图表

    一、代码

      html代码

    1 <!-- html -->
    2 <nz-card   style="background-color: #0e0b2a;border: 0px;color: #8cc5fe;min-height: 180px; 100%;height: 100%;">
    3     <div style="padding: 4px 12px;height: 200px;">
    4         <label>
    5                 {{title}}
    6         </label>
    7         <div echarts id="powerline" [options]="option" (chartInit)="onChartInit($event)"   [loading]="isLoading" [loadingOpts]="loadingOpts" [autoResize]="'true'"  style="position: relative;left: 4px;-webkit-tap-highlight-color: transparent;user-select: none;overflow-y: hidden; 100%;height: 100%;"  class="demo-chart"></div>
    8     </div>
    9 </nz-card> 

      ts代码

      1 import { Component, OnInit, Input, SimpleChanges, HostListener, ElementRef } from '@angular/core';
      2 import * as echarts from 'echarts';
      3 import { fromEvent } from 'rxjs';
      4 
      5 @Component({
      6   selector: 'app-powerline',
      7   templateUrl: './powerline.component.html',
      8   styleUrls: ['./powerline.component.css']
      9 })
     10 export class PowerlineComponent implements OnInit {
     11   @Input() title:string;
     12   @Input() value:any;
     13 
     14  
     15 
     16   public option:any;
     17   public  echartsInstance: any;
     18 
     19   //时间轴
     20   private timeline_data:any;
     21   //功率曲线轴
     22   private power_data:any;
     23 
     24   //自定义监听事件
     25   private pageResize:any;
     26   constructor(private el:ElementRef) { 
     27     //监听窗口resize事件,调用重绘图表方法,重新绘图
     28     this.pageResize = fromEvent(window, 'resize').subscribe(() => {
     29         this.resizeChart();
     30     });
     31   }
     32 
     33   //ngx-echarts初始化,获得图表实例
     34   onChartInit(event) {
     35     this.echartsInstance = event;
     36  }
     37 
     38 
     39   //重新绘制图表
     40   resizeChart() {
     41     if (this.echartsInstance) {
     42       this.echartsInstance.resize();
     43     }
     44   }
     45 
     46   ngOnInit() {    
     47    
     48   }
     49 
     50   ngOnChanges(changes: SimpleChanges): void {
     51     // this.power_data = this.processPowerLineData();
     52     this.option = {
     53       title: {
     54           text: '',
     55       },
     56       tooltip: {
     57           trigger: 'axis'
     58       },
     59       legend: {
     60         data:['功率'],
     61         bottom :10,
     62       },
     63       grid:{
     64         x:35,
     65         y:25,
     66         x2:30,
     67         y2:50,
     68         borderWidth:1
     69       },
     70       toolbox: {
     71           show: false,
     72           feature: {
     73               magicType: {show: false, type: ['stack', 'tiled']},
     74               saveAsImage: {show: false}
     75           }
     76       },
     77       xAxis: {
     78           name:'时间',
     79           type: 'category',
     80           nameGap :6,
     81           nameTextStyle :{
     82             color :'#364c64',
     83           },
     84           boundaryGap: false,
     85           axisLine :{
     86               show:true,
     87               lineStyle :{
     88                   color:'#083b73',
     89                   width :0,
     90                   //shadowOffsetY :10,
     91               },
     92           },
     93           axisTick :{
     94               show:false,  
     95           },
     96           splitLine :{
     97               show:false,
     98           },
     99           axisLabel:{
    100              color :'#364c64' ,
    101              
    102           },
    103           data: this.processTimeLineData(),
    104       },
    105       yAxis: [{
    106           type: 'value',
    107           name:'功率(KW)',
    108           max:1000,
    109           nameTextStyle :{
    110             color :'#364c64',
    111           },
    112           axisLine :{
    113               show:true,
    114               lineStyle :{
    115                   color:'#19193f',
    116                   width :2,
    117                   //shadowOffsetY :10,
    118               },
    119           },
    120           axisTick :{
    121               show:false,  
    122           },
    123           splitLine :{
    124               show:false,
    125           },
    126           axisLabel:{
    127             color :'#364c64' ,
    128             margin:35,
    129             textStyle: {
    130                      align:'left',
    131                      // baseline:'left',
    132                      // left:-40,
    133              }
    134              
    135           },
    136           
    137       },{
    138           type: 'value',
    139           name:'',
    140           max:2500,
    141           axisLine :{
    142               show:true,
    143               lineStyle :{
    144                   color:'#19193f',
    145                   width :2,
    146               },
    147           },
    148           axisTick :{
    149               show:false,  
    150           },
    151           splitLine :{
    152               show:false,
    153           },
    154           axisLabel:{
    155              color :'#22a0f3' ,
    156              
    157           },
    158           
    159       }],
    160       series: [{
    161           name: '功率',
    162           type: 'line',
    163           symbol: 'none',
    164           itemStyle :{
    165               show: false,
    166               color :'#22a0f3',
    167               borderWidth :1,
    168           },
    169           lineStyle :{
    170             color:'#22a0f3',  
    171             //type:'dashed',
    172           },
    173           smooth: true,
    174           data:this.processPowerLineData(),
    175         //   data:this.power_data,
    176         //   data: [300, 590, 350, 790, 360, 550, 450,300, 590, 350, 790,300, 590, 350, 790, 360, 550, 450,300, 590, 350,300, 590,580]
    177       }]
    178     };
    179     
    180 }
    181 
    182 
    183   //处理功率曲线时间轴数组
    184   processTimeLineData(){
    185     const _self=this;
    186     _self.timeline_data = [];
    187     if(_self.value){
    188         if(0 != _self.value.length){
    189             _self.value.map(
    190                 item =>{
    191                     let tem_a = item.time;
    192                     if(tem_a.length ==1){
    193                         tem_a = "0" + item.time + ":00";
    194                     }else if(tem_a.length == 2){
    195                         tem_a = item.time + ":00";
    196                     }else{
    197                         tem_a = item.time + ":00";
    198                     }
    199                     // parseInt(item.tem_a)
    200                     _self.timeline_data.push(tem_a);
    201                 }
    202             ) 
    203         }else{
    204             _self.timeline_data = ['00:00','01:00','02:00','03:00','04:00','05:00','06:00','07:00','08:00','09:00','10:00','11:00','12:00','13:00','14:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00','22:00','23:00',"24:00"];
    205         }
    206     }else{
    207         _self.timeline_data = ['00:00','01:00','02:00','03:00','04:00','05:00','06:00','07:00','08:00','09:00','10:00','11:00','12:00','13:00','14:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00','22:00','23:00',"24:00"];
    208     }
    209     return _self.timeline_data;
    210 }
    211 
    212   //处理功率曲线数据数组
    213   processPowerLineData(){
    214       const _self=this;
    215       _self.power_data = [];
    216       if(_self.value){
    217           if(0 != _self.value.length){
    218             _self.value.map(
    219                 item =>{
    220                     _self.power_data.push(parseInt(item.powerp)) ;
    221                 }
    222             )
    223           }else{
    224             _self.power_data = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
    225           }
    226       }else{
    227         _self.power_data = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
    228       }
    229       return _self.power_data;
    230   }
    231 
    232 
    233   ngOnDestroy(): void {
    234       //销毁功率因数曲线的订阅事件
    235       if(this.pageResize){
    236         this.pageResize.unsubscribe();
    237       }
    238   }
    239 
    240 }

    二、截图

      改变窗口大小前:

      改变窗口大小后:

      

     三、说明

      注意:ngx-echarts想要图表能够随着窗口大小自适应,有两个关键点:

        ① 容纳图表的容器支持自适应

        ② 监听窗口的resize事件,当监听到变化时候,重新绘制图表

  • 相关阅读:
    [SQL Basics] Indexes
    [DS Basics] Data structures
    [Algorithm Basics] Search
    [Algorithm Basics] Sorting, LinkedList
    [Java Basics] multi-threading
    [Java Basics] Reflection
    [Java Basics] Collection
    SSH basics
    纯css实现三角形
    2015年百度实习生前端笔试题上海卷a
  • 原文地址:https://www.cnblogs.com/mycnblogs-guoguo/p/10381970.html
Copyright © 2011-2022 走看看