extjs4图表绘制之折线图实现方法分析

本文实例讲述了extjs4图表绘制之折线图实现方法。分享给大家供大家参考,具体如下:

本篇文章将介绍extjs中自带的图表

在本次案例中,提供一下功能:

1.从后端请求数据并运用到图表中,形成动态数据。

2.查询出每年各个月中人数。

请看下面代码:

Ext.define('ChartLineTest', {
  extend: 'Ext.panel.Panel',
  autoScroll : true,
  selectYear:null,//定义年份
  initComponent: function () {//定义初始化组件
    var me = this;
    me.store = me.createStore();//定义数据
    me.grid = me.getGridPanel();
    me.mainPanel = Ext.create('Ext.panel.Panel',{
      layout:'fit',
      items:[me.grid],
      tbar:me.createQueryTbar(),//定义查询的组件
    });

    Ext.apply(me,{
      layout:'fit',
      items:[me.mainPanel]
    });
    me.callParent();
    me.mainPanel.down('chart').on('cellclick', function(grid, td, cellIndex, record, tr, rowIndex, e, eOpts) {
      me.onCellClick(cellIndex, record);
    });
  },

  getGridPanel:function(){
    var me = this;
    return {
      xtype:'chart',
      animate : true,// 是否支持动态数据变化
        legend: {// 图例
          display: "bottom",
          spacing: 2,
          padding: 5,
          font: {
            name: 'Tahoma',
            color: '#3366FF',
            size: 12,
            bold: true
          }
        },
      store:me.store,
      axes:me.createAxes(),//定义横竖轴数据
      series:me.createSeries(),//定义图表中的数据
    }
  },
  createQueryTbar: function(){
    var me=this;
    var tbar=[
      {
        xtype : 'combo',
        fieldLabel:'选择年份',
        name:'selectYear',
        queryMode : 'local',
        editable : true,
        readOnly:false,
        labelWidth: 60,
        width:200,
        store : new Ext.data.ArrayStore({
          fields : ['id','name'],

          data : []
        }),
        valueField : 'name',
        displayField : 'id',
        triggerAction : 'all',
        autoSelect : true,
        listeners : {
          beforerender : function(){
            var newyear = Ext.Date.format(new Date(),'Y');//这是为了取现在的年份数
            var yearlist = [];
            for(var i = newyear;i>=2015;i--){
              yearlist.push([i,i]);
            }
            this.store.loadData(yearlist);
          }
        }
      },
      {xtype: 'button',text : '查找',
        listeners : {
          "click" : function() {
            var value = Ext.ComponentQuery.query('[name=selectYear]')["0"].value;
            me.selectYear = value;//赋值给selectYear属性
            me.store.load();
          }}}
    ];
    return tbar;
  },
  createStore: function () {
    //从后端请求数据
    var me = this;
    return Ext.create('Ext.data.JsonStore', {
      fields: [
        {name: 'id', mapping: 'id'},
        {name:'statTime',mapping:'statTime',type:'date',dateFormat:'time'},
        'activeCount', 'effectiveCount','effectiveProportion',
      ],
      proxy: {
        type: 'ajax',
        url: ctx+'/mvc/com/analyze/tblVwMonthUserStat',
        reader: {
          type: 'json',
          root: 'root',
          totalProperty: 'totalProperty'
        }
      },
      listeners: {
        'beforeload': function (store, operation, eOpts) {
          store.proxy.extraParams.selectYear = me.selectYear//赋值给selectYear属性
        }
      },
      autoLoad: true
    });
  },

  createAxes: function () {
    var me = this;
    var columns = [
      {
        type: 'Numeric',
        position: 'left',//定义位置
        minimum: 1000,
        maximum: 10000,

        label: {
          renderer: Ext.util.Format.numberRenderer('0,0')
        },
        title: '人数',
        grid: true,
      },
      {
        type: 'Numeric',
        position: 'right',
        minimum: 1000,
        maximum: 10000,

        label: {
          renderer: Ext.util.Format.numberRenderer('0,0')
        },
        title: '人数',
        grid: true,
      },
      {
        type: 'Time',
        position: 'bottom',
        fields: 'statTime',
        step: [Ext.Date.MONTH, 1],///定义间隔
        dateFormat: 'y-m',
        title: '日期',
        grid: false,

      }
    ];
    return columns;
  },
  createSeries: function () {
    var me = this;
    var columns = [
      {
        type: 'line',
        highlight: {
          size: 7,
          radius: 7
        },
        fill: false,
        // showInLegend:false,//要是为false 在坐标系中将不显示标记
        axis: 'left',
        xField: 'statTime',
        renderer: Ext.util.Format.dateRenderer('Y-m '),
        yField: 'activeCount',
        title :'活跃用户',
        //定义浮标(提示框) 显示想要显示的文字
        tips: {
          trackMouse: true,
          width: 200,
          height: 40,
          renderer: function(storeItem, item) {
            this.setTitle( "人数:"+storeItem.get('activeCount')+",占比:"+storeItem.get('effectiveProportion') );
          }
        },
        label: {
          display: 'insideEnd',
          field: 'activeCount',
          renderer: Ext.util.Format.numberRenderer('0'),
          orientation: 'vertical',
          font:'15px Helvetica, sans-serif',
          'text-anchor': 'end',
          color:'red',
        },
        markerConfig: {
          type: 'cross',
          size: 3,
          radius: 3,
          'stroke-width': 0
        }
      },
      {
        type: 'line',
        highlight: {
          size: 7,
          radius: 7
        },
        // selectionTolerance:0,

        axis: 'left',
        title :'有效用户',
        fill: false,
        xField: 'statTime',
        renderer: Ext.util.Format.dateRenderer('Y-m '),
        yField: 'effectiveCount',

        markerConfig: {
          type: 'circle',
          size: 3,
          radius: 3,
          'stroke-width': 0
        },
        /* style: {
          color: '#6666CC'
        },*/
        style: {
          stroke: '#00ff00',
          /* 'stroke-width': 10,
          fill: '#80A080',
          opacity: 0.2*/
        },
     /*   label: {
          display: 'middle',
          field: 'effectiveCount',
          renderer: Ext.util.Format.numberRenderer('0'),
          orientation: 'vertical',
          font: '15px Helvetica, sans-serif',
          'text-anchor': 'end',
          color: 'red',
          minMargin:100,
        },*/
        //定义坐标上的文字的属性
        label: {
          display: 'over',
          field: 'effectiveCount',
          renderer: Ext.util.Format.numberRenderer('0'),
          orientation: 'vertical',//数值显示的方式 ‘horizontal'水平显示
          font: '15px Helvetica, sans-serif',
          'text-anchor': 'start',
          color: 'red',//字体 颜色
          //对坐标上的文字进行操作,当数值大于5000的时候显示另一种颜色
          renderer: function(value, label, storeItem, item, i, display, animate, index) {

            if (value >= 5000) {
              label.setAttributes({fill:'#080',});
              value = value;
            }
            return value;
          }
        }
      },

    ];
    return columns;
  }

});

每一个图表必须要三个组成部分: 数据(data), 轴(axes)和系列(Series)。

数据 -  是图表用来展示的信息,在Ext 中使用标准的Model 或是 Store.

 - 提供数据的来源,范围,规模和单位。组成图表的基本架构。 轴可以是笛卡尔坐标(x,y), 极性(或径向),或轨距(用于仪表盘图表的一维轴)。尽管一个结合多个类型系列的图表需要额外的轴定义,但大多数的图表还是使用一组轴。

系列- 这个属于是用于数据的图形渲染的。换句话说,就是一个图标的基本图形项目,像 线图,柱状图,栏位或饼图。一个图形可以包含多个系列。 例如: 在一个图形的中有三个线状图就包含有三个独立的线系列。

可以添加标签,标记和图例说明到图上;还可以设置动画效果或是放大某一个区块。

label(标签) -- 对一个轴或是系统的解释性标题。

marker(标记) -- 用来在一个系列中绘制数据点的一个符号,形状或是图片。

legend(说明) -- 提供图的说明,解释各变量在图形中代表的意义。(图例)

listeners(监听器)--等待某个事件并作出一些动作像鼠标事件等

animation( 动画)--  图的元素可以移动

tips(提示框)--  当鼠标放在坐标轴上显示的提示文字。

markerConfig--定义每一点坐标的形状。

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript图片操作技巧大全》、《JavaScript切换特效与技巧总结》、《JavaScript运动效果与技巧汇总》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

(0)

相关推荐

  • 学习ExtJS Window常用方法

    一.属性 plain:布尔类型,true表示强制与背景色保持协调,默认值为false. resizable:布尔类型,用户是否可以调整窗体大小,默认值为true表示可以调整大小. maxinizable:布尔类型,true表示显示最大化按钮,默认值为false. maximized:布尔类型,true表示显示窗体时将窗体最大化,默认值为false. closable:布尔类型,true表示显示关闭按钮,默认值为true. bodyStyle:与边框的间距,如:bodyStyle:"padding

  • Extjs学习笔记之五 一个小细节renderTo和applyTo的区别

    ExtJS中的renderTo和applyTo的差别 对applyTo和renderTo的理解和思考 个人认为这两篇文章写的不够通俗.写一个简单的例子来看看最终生成了什么代码, 复制代码 代码如下: <head> <title>RenderTo and ApplyTo</title> <link rel="Stylesheet" type="text/css" href="ext-3.1.0/resources/c

  • ExtJs之带图片的下拉列表框插件

    在ExtJs的官方网站上有一个带图片的下拉列表,其中扩展了ExtJs的Combo,名称叫做IconCombox,官方地址为:     http://www.extjs.com/learn/Tutorial:Extending_Ext_Class_Chinese     但是这个IconComboBox有个缺点,就是显示的图片不能按比例变化.如果图片太大,就会出现覆盖了Combobox中的字,或者出现Icon显示不全种种问题,后来读了IconComboBox的源代码,修改了其中的问题:     在

  • ExtJS下grid的一些属性说明

    1.界面修改(css style): Extjs中界面风格与我们产品本身的风格有很大不同,从边框.选中行的颜色到鼠标移动到的行的颜色.菜单等,几乎都不同.Extjs对这些样式的设置都是由css完成的.如: 选中行的颜色就可用如下设置完成: .x-grid3-row-selected{background:#c6e2ff!important;} 其他的都类似,只要找到对应的class, 然后设置要修改的部分即可. 2. 属性的作用(About Ext.grid. GroupingView, Edi

  • Extjs grid添加一个图片状态或者按钮的方法

    extjs的grid中我们经常需要添加一个图片状态或者按钮,总结一下自己用过的方法: 一.状态表示: 复制代码 代码如下: renderer:function(value){ if(value==0){ return "<img src='images/icons/cancel.png'>"; }else if(value==1){ return "<img src='images/icons/accept.png'>"; } return

  • extjs图表绘制之条形图实现方法分析

    本文实例讲述了extjs图表绘制之条形图实现方法.分享给大家供大家参考,具体如下: 这篇文章将介绍extjs图表中条形图. 将实现以下的功能: 1.从后端请求数据并运用到图表中,形成动态数据. 2.查询出每年各个月中人数. 3.改变条形柱的颜色,改变默认的颜色换成自己想要的颜色. renderer: function(sprite, storeItem, barAttr, i, store) { barAttr.fill = '#3D96AE' return barAttr; }, 先看完整的代

  • ExtJs使用总结(非常详细)

    一.获取元素(Getting Elements) 1.Ext.get var el = Ext.get('myElementId');//获取元素,等同于document.getElementById('myElementId');//会缓存 2. Ext.fly var el = Ext.fly('myElementId')//不需要缓存. 注:享元模式(Flyweight Design Pattern)是一种节省内存的模式,该模式的大概原理是建立单个全体对象然后不断反复使用它. 3.Ext.

  • extjs图形绘制之饼图实现方法分析

    本文实例讲述了extjs图形绘制之饼图实现方法.分享给大家供大家参考,具体如下: 这篇文章将介绍extjs中自带的饼图. 代码如下: Ext.define('ChartPieTest', { extend: 'Ext.panel.Panel', autoScroll : true, initComponent: function () { var me = this; me.store = me.createStore(); me.grid = me.getGridPanel(); me.mai

  • Extjs中常用表单介绍与应用

    目标: 知道表单面板如何创建 了解表单面板中xtype的类型的应用 知道表单面板如何验证,绑定,取值 综合应用表单面板(玩转它) 内容: 首先我们要理解的是FormPanel也是继承panel组件的.所以它有着panel的属性 要创建一个表单面板其实很简单 var MyformPanel=new Ext.form.formpanel(); 表单面板和面板一样只是作为一个容器出现的,需要我们使用items加入各控件元素来丰富我们的表单面板, defaults:{},此属性提取了items中各组件项

  • 解决Extjs上传图片无法预览的解决方法

    复制代码 代码如下: { width: 450, fileUpload: true, fieldLabel: '选择图片', items: [{ xtype: 'textfield', id: 'up_forth', name: 'up_forth', inputType: 'file', width: 300 }] } 预览box 复制代码 代码如下: { columnWidth: .18, bodyStyle: ' margin:4px 10px 10px 5px', layout: 'fo

  • ExtJS 简介 让你知道extjs是什么

    (wlr的blog应用) (ExtJS的表格控件) (不同主题的ExtJS弹出框效果) ExtJS是一个用javascript写的,主要用于创建前端用户界面,是一个与后台技术无关的前端ajax框架.因此,可以把ExtJS用在.Net.Java.Php等各种开发语言开发的应用中. ExtJs最开始基于YUI技术,由开发人员Jack Slocum开发,通过参考Java Swing等机制来组织可视化组件,无论从UI界面上CSS样式的应用,到数据解析上的异常处理,都可算是一款不可多得的JavaScrip

  • ExtJS[Desktop]实现图标换行示例代码

    ExtJS中的desktop的demo中,默认的图标排列是不换行的,这就造成了如果桌面上的图标过多的话,当超出桌面区域,会造成图标遮盖,即超出桌面区域的部分会被任务栏遮挡,以下代码就是为了解决这一问题的. 首先,在desktop.js中扩展一个函数. 复制代码 代码如下: initShortcut : function() { var btnHeight = 64; var btnWidth = 64; var btnPadding = 30; var col = {index : 1,x :

随机推荐