ngx-echarts响应式图表
一、代码
html代码
<!-- html -->
<nz-card style="background-color: #0e0b2a;border: 0px;color: #8cc5fe;min-height: 180px;width: 100%;height: 100%;">
<div style="padding: 4px 12px;height: 200px;">
<label>
{{title}}
</label>
<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;width: 100%;height: 100%;" class="demo-chart"></div>
</div>
</nz-card>
ts代码
import { Component, OnInit, Input, SimpleChanges, HostListener, ElementRef } from '@angular/core';
import * as echarts from 'echarts';
import { fromEvent } from 'rxjs';
@Component({
selector: 'app-powerline',
templateUrl: './powerline.component.html',
styleUrls: ['./powerline.component.css']
})
export class PowerlineComponent implements OnInit {
@Input() title:string;
@Input() value:any;
public option:any;
public echartsInstance: any;
//时间轴
private timeline_data:any;
//功率曲线轴
private power_data:any;
//自定义监听事件
private pageResize:any;
constructor(private el:ElementRef) {
//监听窗口resize事件,调用重绘图表方法,重新绘图
this.pageResize = fromEvent(window, 'resize').subscribe(() => {
this.resizeChart();
});
}
//ngx-echarts初始化,获得图表实例
onChartInit(event) {
this.echartsInstance = event;
}
//重新绘制图表
resizeChart() {
if (this.echartsInstance) {
this.echartsInstance.resize();
}
}
ngOnInit() {
}
ngOnChanges(changes: SimpleChanges): void {
// this.power_data = this.processPowerLineData();
this.option = {
title: {
text: '',
},
tooltip: {
trigger: 'axis'
},
legend: {
data:['功率'],
bottom :10,
},
grid:{
x:35,
y:25,
x2:30,
y2:50,
borderWidth:1
},
toolbox: {
show: false,
feature: {
magicType: {show: false, type: ['stack', 'tiled']},
saveAsImage: {show: false}
}
},
xAxis: {
name:'时间',
type: 'category',
nameGap :6,
nameTextStyle :{
color :'#364c64',
},
boundaryGap: false,
axisLine :{
show:true,
lineStyle :{
color:'#083b73',
width :0,
//shadowOffsetY :10,
},
},
axisTick :{
show:false,
},
splitLine :{
show:false,
},
axisLabel:{
color :'#364c64' ,
},
data: this.processTimeLineData(),
},
yAxis: [{
type: 'value',
name:'功率(KW)',
max:1000,
nameTextStyle :{
color :'#364c64',
},
axisLine :{
show:true,
lineStyle :{
color:'#19193f',
width :2,
//shadowOffsetY :10,
},
},
axisTick :{
show:false,
},
splitLine :{
show:false,
},
axisLabel:{
color :'#364c64' ,
margin:35,
textStyle: {
align:'left',
// baseline:'left',
// left:-40,
}
},
},{
type: 'value',
name:'',
max:2500,
axisLine :{
show:true,
lineStyle :{
color:'#19193f',
width :2,
},
},
axisTick :{
show:false,
},
splitLine :{
show:false,
},
axisLabel:{
color :'#22a0f3' ,
},
}],
series: [{
name: '功率',
type: 'line',
symbol: 'none',
itemStyle :{
show: false,
color :'#22a0f3',
borderWidth :1,
},
lineStyle :{
color:'#22a0f3',
//type:'dashed',
},
smooth: true,
data:this.processPowerLineData(),
// data:this.power_data,
// 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]
}]
};
}
//处理功率曲线时间轴数组
processTimeLineData(){
const _self=this;
_self.timeline_data = [];
if(_self.value){
if(0 != _self.value.length){
_self.value.map(
item =>{
let tem_a = item.time;
if(tem_a.length ==1){
tem_a = "0" + item.time + ":00";
}else if(tem_a.length == 2){
tem_a = item.time + ":00";
}else{
tem_a = item.time + ":00";
}
// parseInt(item.tem_a)
_self.timeline_data.push(tem_a);
}
)
}else{
_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"];
}
}else{
_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"];
}
return _self.timeline_data;
}
//处理功率曲线数据数组
processPowerLineData(){
const _self=this;
_self.power_data = [];
if(_self.value){
if(0 != _self.value.length){
_self.value.map(
item =>{
_self.power_data.push(parseInt(item.powerp)) ;
}
)
}else{
_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];
}
}else{
_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];
}
return _self.power_data;
}
ngOnDestroy(): void {
//销毁功率因数曲线的订阅事件
if(this.pageResize){
this.pageResize.unsubscribe();
}
}
}
二、截图
改变窗口大小前:

改变窗口大小后:

三、说明
注意:ngx-echarts想要图表能够随着窗口大小自适应,有两个关键点:
① 容纳图表的容器支持自适应
② 监听窗口的resize事件,当监听到变化时候,重新绘制图表
ngx-echarts响应式图表的更多相关文章
- echarts 响应式布局
<body> <!-- 为ECharts准备一个具备大小(宽高)的Dom --> <div id="main" style="width: ...
- 【译】用 Chart.js 做漂亮的响应式表单
数据包围着我们.虽然搜索引擎和其他应用都对基于文本方式表示的数据偏爱有加,但人们发现可视化是更容易理解的一种方式.今年初,SitePoint 发表了 Aurelio 的文章< Chart.js简 ...
- 怎样把echarts图表做成响应式的
如果想要把echarts图表给做成响应式的那么就应该用rem 单位,给图表的外围容器设置rem 单位,然后调用jquery 的resize方法,$(window).resize(function(){ ...
- Echarts多个图表响应式以及其他问题
1.限制柱状图的宽度(自适应的柱子很大) barMaxWidth:30//设置柱状最大的宽度 2.设置y轴的label标签显示(单位 元 转 万) axisLabel: { formatte ...
- 基于 Vue + Element 的响应式后台模板
项目地址 https://github.com/caochangkui/vue-element-responsive-demo 主要功能 响应式侧边栏 面包屑导航(结合router.js) 路由动效 ...
- Metronic – 超赞!基于 Bootstrap 的响应式后台管理模板
Metronic 是一套精美的响应式后台管理模板,基于强大的 Twitter Bootstrap 框架实现.Metronic 拥有简洁优雅的 Metro UI 风格界面,6 种颜色可选,76 个模板页 ...
- Android响应式界面开发要点
现在很多项目需要到达同一个Apk既可以在Phone上跑也尅在tablet上跑,即界面要适应不同尺寸和类型的需要而自动调整.这个即为响应式设计.在web开发商响应式设计已经是个常谈的内容了,而对于and ...
- [译] Swift 的响应式编程
原文 https://github.com/bboyfeiyu/iOS-tech-frontier/blob/master/issue-3/Swift的响应式编程.md 原文链接 : Reactiv ...
- echarts生成的图表大小怎么随屏幕的大小改变自适应
最近在做图表,记录一下用到的知识点,当做自己的日记吧,会不断添加新内容 1,echarts生成的图表大小怎么随屏幕的大小改变自适应? this.chart.setOption(this.options ...
随机推荐
- touch-action属性引起的探索
最近在做微信项目的时候遇到一个奇怪的问题: 常购清单的商品多了以后往上滑没有任何反应,不能滑动.但商城首页又可以往上滑.而且ios没有这个问题,安卓才有这个问题. 起初我以为是因为这2个页面调用接口 ...
- vscode 开发 Java web 急速教程
1.确认在本机已安装 JAVA SDK 2.确认在本机已安装 maven 3.确认在本机已安装 tomcat 下面是我本机相关软件版本: java version "1.8.0_191&qu ...
- [CocoaPods]Podfile文件
Podfile是一个描述一个或多个Xcode项目的目标依赖项的规范.该文件应该只是命名Podfile.指南中的所有示例都基于CocoaPods 1.0及更高版本. Podfile可以非常简单,这会将A ...
- 哥们,你真以为你会做这道JVM面试题?
有关Java虚拟机类加载机制相关的文章一搜一大把,笔者这里也不必再赘述一遍了. 笔者这里捞出一道code题要各位大佬来把玩把玩,如果你一眼就看出了端倪,那么恭喜你,你可以下山了: public cla ...
- MessageBeep - Play a System sound
There is a interesting function which can play a System sound. First let's see the WinAPI. //声明: Mes ...
- Xamarin.Android Timer使用方法
首先声明命名空间: using System.Threading; 然后创建Timer对象: Timer timer; 接着实例化timer并且给委托事件: TimerCallback timerDe ...
- odoo开发笔记 -- 升级模块 提示外部ID找不到
可能的原因: 排查顺序: 1.id在视图中的加载顺序问题. 可能是:__manifest__.py文件,view文件先后加载顺序有问题:也可能是:xml 视图文件中,被引用的id出现在了引用id的下方 ...
- 第四章 客户端负载均衡:Spring Cloud Ribbon
spring cloud ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,它基于Netflix Ribbon 实现.通过Spring Cloud 的封装,可以轻松的将面向服务的R ...
- mysql 开发进阶篇系列 33 工具篇(mysqlbinlog日志管理工具)
一.概述 由于服务器生成的二进制日志文件以二进制格式保存,所以如果要想检查这些文件的文本格式,就会用到mysqlbinlog日志管理工具. mysqlbinlog的语法如下: mysqlbinlog ...
- Android_自适应布局
1.屏幕相关概念1.1分辨率是指屏幕上有横竖各有多少个像素1.2屏幕尺寸指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸android将屏幕大小分为四个级别(smal ...