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 ...
随机推荐
- PMP:5.项目范围管理
项目范围管理包括确保项目做且只做所需的全部工作,以成功完成项目的各个过程. 管理项目范围主要在于定义和控制哪些工作应该包括在项目内,哪些不应该包括在项目内. 核心概念: 规划范围管理:为记录如何定 ...
- pb数据导出
pb数据导出(一) 1.在窗口新建用户事件 ue_export 2.事件调用函数 gf_dw_to_excel(THIS.dw_dict) 3.写函数 :boolean lb_setborde ...
- 9.7 翻译系列:EF数据注解特性之--InverseProperty【EF 6 Code-First系列】
原文链接:https://www.entityframeworktutorial.net/code-first/inverseproperty-dataannotations-attribute-in ...
- 背水一战 Windows 10 (81) - 全球化
[源码下载] 背水一战 Windows 10 (81) - 全球化 作者:webabcd 介绍背水一战 Windows 10 之 全球化 Demo 格式化数字 示例1.演示全球化的基本应用Locali ...
- MyBatis 源码分析 - SQL 的执行过程
* 本文速览 本篇文章较为详细的介绍了 MyBatis 执行 SQL 的过程.该过程本身比较复杂,牵涉到的技术点比较多.包括但不限于 Mapper 接口代理类的生成.接口方法的解析.SQL 语句的解析 ...
- libRTMP 整体说明
函数结构 (libRTMP)的整体的函数调用结构图如下图所示: 原图地址:http://img.my.csdn.net/uploads/201602/10/1455087168_7199.png 基本 ...
- touch-action属性引起的探索
最近在做微信项目的时候遇到一个奇怪的问题: 常购清单的商品多了以后往上滑没有任何反应,不能滑动.但商城首页又可以往上滑.而且ios没有这个问题,安卓才有这个问题. 起初我以为是因为这2个页面调用接口 ...
- 第一篇:服务的注册与发现Eureka(Finchley版本)
一.创建服务注册中心(Eureka) 1. 首先创建一个maven主工程 创建一个主Maven工程,在其pom文件引入依赖,spring Boot版本为2.0.3.RELEASE,Spring Clo ...
- Cellular Traffic Offloading
Reference: [1] Mobile Data Offload for 3G Networks [2] Mobile Data Offloading through Opportunistic ...
- XyTalk企业即时通讯IM开始开源
网址: https://gitee.com/475660/xyTalk-pc https://github.com/xy-Group/xyTalk-pc Xy.Platform是一个高性能.可扩展的企 ...