zoukankan      html  css  js  c++  java
  • 闭包在Echarts数值处理的应用

    在echarts中,配置项提供了许多函数属性的设置。这些函数只能知道当前处理点数据,无法知道前一次处理的暂存数据。在有些场景下,需要利用前一次的处理数据,为这次处理提供依据。全局变量会造成不同图形间的数据污染,而闭包恰好可以完美的解决这个问题。

    一、应用场景

    1. 在bar类型的图形中,依据横轴dataIndex的数值,显示柱形的颜色,每隔1000个换一个颜色;
    2. 在bar类型的图形中,依据横轴的数值,显示颜色;如,数值的格式404-22:01,404-22:02,500-22:02等,其中404显示成一种颜色,500显示成另外一种颜色;

    图形如下:
    555555
    12333

    二、实现分析

    在echarts中,柱形图的颜色控制需要设置如下参数:

        {
            series:{
                type: "bar",
                itemStyle: {
                    normal: {
                        color: ""//可以是function(){},控制颜色
                    }
                }
            }
        }
    
        //颜色列表
        var colorList=['#191970','#1C86EE','#37A2DA','#67E0E3','#3C6188','#529BFF','#7CAE6B','#EAB839','#6ED0E0','#D48265', '#6E7074','#00FFFF']
        var colorCount = 2;
    

    场景一:
    直接依据dataindex%1000设置颜色,即可符合要求

        {
            series:{
                type: "bar",
                itemStyle: {
                    normal: {
                        color:function(param){
                            var idx = parseInt(params.dataIndex/1000);
                            return colorList[idx%colorCount];
                        }//可以是function(){},控制颜色
                    }
                }
            }
        }
    

    场景二:
    由于柱形图的颜色会依据X轴的数值变化,这个变化是取决于前一个数值[404-10:22]和当前数值[404-10:23]的[404]部分比较,如果与前一个数值相同,则颜色不变,如果数值变化就换一种颜色;

    过程分析:param中不带前一个参数的值,只有当前数值的值,这样就需要存取前一个颜色和前一个数值;如果用全局变量,不同的图形之间就会出现相互污染;这个场景下只有用闭包,刚好满足这个需求,代码如下:

        {
            series:{
                type: "bar",
                itemStyle: {
                    normal: {
                        color:colorSwitchbyValue(colorCount,xAxisFormatter)//可以是function(){},控制颜色
                    }
                }
            }
        }
        //依据数值处理颜色,闭包实现
        function colorSwitchbyValue(colorCountp,f) {
            var LastVal=""
            var colorIndex=0
            return function(params){
                var color=colorList[params.dataIndex%colorCountp];           
                var curVal=f(params.name)  
                if (curVal==LastVal){               
                     color= colorList[colorIndex%colorCountp]; 
                }else{
                    colorIndex=(colorIndex+1)%colorCountp
                    color= colorList[colorIndex]; 
                }
                LastVal=curVal        
                return  color;        
            }     
        }
        //对X轴数值进行处理的
        function xAxisFormatter(value){
            if (typeof value == "string"){
                var indexStr=value.indexOf("-")    
                return value.substring(0,indexStr)
            }
            return value
        }
    
  • 相关阅读:
    SAP C4C基于自定义BO开发的OWL UI,如何实现动态访问控制
    如何将SAP C4C自定义BO中类型为图片的附件用PDF文档显示出来
    如何使用SAP Cloud Application Studio创建一个PDF form
    如何让SAP C4C自定义BO实现附件上传的功能
    分盘存储:实现数据库备集群备份文件分散存储
    智能对联模型太难完成?华为云ModelArts助你实现!手把手教学
    五种C语言非数值计算的常用经典排序算法
    软件教练说:性能优化与性能设计,“相亲相爱”的一对
    两种端到端通用目标检测方法
    架构解读丨Volcano作业资源预留设计原理
  • 原文地址:https://www.cnblogs.com/meiguhuaxian/p/12467647.html
Copyright © 2011-2022 走看看