使用canvas绘制股票图【envision.js】

最近的一个小项目需要用到一些财经图表,如股票图,净值曲线图,投资组合饼图等。按照产品的要求,这些图表需要在移动设备【手机,平板电脑】

和pc端良好运行。我们都知道在ios设备上没法运行flash,所以必须把使用flash开发的方案放弃,只能转向采用javascript开发,最新的移动设

备上的浏览器对javascript支持越来越好,同时用于图形图像开发的canvas属性在这里也支持良好。

   选好了技术方案,那就开发吧,很显然如果从零要把这些图表开发的比较完美还是很费时费力的,再说了不要重复发明轮子不是一直教导我们吗。那

么我们就来看看有没有现成的轮子供我们使用呢,经过搜索和查找,envision.js这个javascript图形类库引起了我的注意,这个类库的features

  • 支持所有现代浏览器,从IE6+
  • 支持触摸特性,移动设备
  • 财经图表
  • 时间序列图表
  • 能够自定义图表
  • 基于flotr2,同时也能够适配其他库

它的这些特性已经完全能够满足我们的需求,并且基本不需要进行太多的开发。深入到envision.js的源代码,可以发现他是基于插件开发的,一个很复杂

的图表都是基于一个个插件来组装的,同时他内部也提供了一些现成的Template来让我们马上使用,这些template就是用一些插件组装起来的。

在网上搜了很长时间,发现这个库的文档比较少,实例也比较简单,不够全面,我们怎么修改图形中的颜色以及其他样式都不是很清楚,那么

下面我们来通过一个股票图来学习怎么使用,以及如何配置和修改图表的外观,如图,具体图示可以参见这里

  • 黄色【price】
  • 红色【volume】
  • 蓝色【connection】
  • 绿色【summary】

上面的图片中的样式具体怎么修改,通过下面代码的注释我们来了解下:

function drawStockGraph(data,container){
	    var
	      currentData = data,
	      options, finance,
	      container = document.getElementById(container);

	    options = {
	      container : container,
	      data : {
	        price : currentData.price,//价格数据
	        volume : currentData.volume,//成交量数据
	        summary : currentData.summary//交易情形概括数据
	      },
		//
	      trackFormatter : function (o) {

	        var
	          index = o.index,
	          value;

	        value = currentData.data[index].date + ': ' + currentData.price[index][1] + ", 成交量: " + currentData.volume[index][1];

	        return value;
	      },
	      yTickFormatter:function(n){
        	  return n;
          },
	      // An initial selection
	      selection : {
	        data : {
	          x : {
	            min : 0,
	            max : 250
	          }
	        }
	      },
	      // Override some defaults.
	      // Skip preprocessing to use flotr-formatted data.
	      defaults : {
	        volume : {
	          skipPreprocess : true,
	          config:{
	              //成交量中柱形的样式
	              whiskers : {
	                  lineWidth : 2,
	                  fillStyle:'#85AEDD',
	                  color:'#85AEDD',
	                  fillColor: '#85AEDD'
	                }
	          }
	        },
		//图片中黄色标记的区域
	        price : {
	          skipPreprocess : true,
	          config:{
	        	  mouse:{
	        		  margin:0,
	        		  trackFormatter:function(o){
	        			    var
	        			      index = o.index,
	        			      value;

	        			    if (price.api.preprocessor) {
	        			      index += price.api.preprocessor.start;
	        			    }

	        			    value = '价格: ' + data.price[1][index] + ", 成交量: " + data.volume[1][index];

	        			    return value;
	        		  },
	        		  mousetracktipstyle:'opacity:1;background-color:#D10220;color:#FFFEFF;display:none;width:250px;height:29px;font-size:14px;font-weight:500;position:absolute;padding:2px 8px;-moz-border-radius:0px;border-radius:0px;white-space:nowra'
	        	  }, 
		  //y轴标签的样式
	       	  yaxis : {
                      showLabels : true,
                      min : 0,
                      align:'left',
                      leftoffset:-40
                  },
                  'lite-lines':{
                      lineWidth:1,
                      color: '#82ACDD',
                      fillColor:'#D0E2F8'
                  }
	          }
	        },
		//图片中绿色标记的部分
	        summary : {
	          skipPreprocess : true,
	          config : {
	            xaxis : {
	              // Set x ticks manually with defaults override:
	              ticks : currentData.summaryTicks
	            },
		//波浪线的样式
                'lite-lines' : {
                    show : true,
                    lineWidth : 1,
                    fill : true,
                    fillOpacity : 1,
                    fillBorder : true,
                    fillColor:'#D0E2F8',
                    color:'#82ACDD'
                  },
                  selection : {
                      color:'#e2edf9'
                 }
	          }
	        },
		//图片中蓝色标记的部分
	        connection : {
                config:{
                    fillStyle: '#F3F8FD',//#F3F8FD
                    strokeStyle: '#D0DFF2'//#D0DFF2

                }
	          }
	      }
	    };
	    finance = new envision.templates.Finance(options);
    }

通过上面的代码,这样可以发现要修改这个图形的样式,只要找到图形中都有哪些插件,然后在源代码中搜索这个插件都有哪些配置;注意有些样式是在css中设置的,通过css设置的样式,在firebug中可以看到class名,这部分可以直接修改css样式值。

时间: 2024-10-27 23:20:26

使用canvas绘制股票图【envision.js】的相关文章

js+html5实现canvas绘制镂空字体文本的方法

  本文实例讲述了js+html5实现canvas绘制镂空字体文本的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <!DOCTYPE html> <html> <body> <canvas id="myCanvas" width="200" height="100" style="border:1px solid #d3d3

js+html5实现canvas绘制简单矩形的方法

  本文实例讲述了js+html5实现canvas绘制简单矩形的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <!DOCTYPE html> <html> <body> <canvas id="myCanvas" width="200" height="100" style="border:1px solid #c3c

js+html5实现canvas绘制圆形图案的方法

  本文实例讲述了js+html5实现canvas绘制圆形图案的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <!DOCTYPE html> <html> <body> <canvas id="myCanvas" width="200" height="100" style="border:1px solid #d3d

线程-Android中用canvas如何绘制动态图?请大神速回,在线等!!

问题描述 Android中用canvas如何绘制动态图?请大神速回,在线等!! public class MyView extends View { private Paint paint; private int roundColor, roundProgressColor; private float roundWidth; private int style; private int process = 1; private Canvas mcanvas; private RectF ov

js HTML5 Canvas绘制转盘抽奖_javascript技巧

本文实例为大家分享了js转盘抽奖的具体代码,供大家参考,具体内容如下 1.实现的基本效果   2.主要的内容  •html5中canvas标签的使用  •jQueryRotate.js旋转插件 3.主要html代码 <body> <div class="content"> <div class="wheel"> <canvas class="item" id="wheelCanvas"

js+html5实现canvas绘制椭圆形图案的方法_javascript技巧

本文实例讲述了js+html5实现canvas绘制椭圆形图案的方法,HTML5 canvas 没有画椭圆的方法,以下代码可以画出椭圆,分享给大家供大家参考,具体实现方法如下: 1.在一个隐式的画布 (将 其 CSS 定义成:display:none; ) 上画园. 2.将隐式画布的影像,以不同的宽高比值,画在另一个显式的画布,以使园变成椭圆. 3.进而,加进动画功能. <html> <head> <meta http-equiv="Content-Type"

js+canvas绘制矩形的方法_javascript技巧

本文实例讲述了js+canvas绘制矩形的方法.分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtm

js+html5实现canvas绘制镂空字体文本的方法_javascript技巧

本文实例讲述了js+html5实现canvas绘制镂空字体文本的方法.分享给大家供大家参考.具体实现方法如下: <!DOCTYPE html> <html> <body> <canvas id="myCanvas" width="200" height="100" style="border:1px solid #d3d3d3;"> Your browser does not s

JS+Canvas绘制时钟效果_javascript技巧

本文实例为大家分享了使用canvas绘制时钟的具体代码,供大家参考,具体内容如下 1. clock.html    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Description" content=""> <title>canvas时钟</t