/*global Raphael, d3 */ /*! * Parallel的兼容性定义 */ ;(function (name, definition) { if (typeof define === 'function') { // Module define(definition); } else { // Assign to common namespaces or simply the global object (window) this[name] = definition(function (id) { return this[id];}); } })('Parallel', function (require) { var DataV = require('DataV'); var Axis = require('Axis'); var Brush = require('Brush'); /** * 构造函数 * Options: * * - `width` 数字,图片宽度,默认为750,表示图片高750px * - `height` 数字,图片高度,默认为500 * - `marginWidth` 数组,表示图片上、右、下、左的边距,默认为 [20, 20, 20, 20] * - `backgroundAttr` 对象,没有选中的线的样式,默认为{"fill": "none", "stroke": "#ccc", "stroke-opacity": 0.4}, 具体设置方式请参考Raphael手册:http://raphaeljs.com/reference.html#Element.attr * - `foregroundAttr` 对象,被选中的线的样式,默认为{"fill": "none", "stroke": "steelblue", "stroke-opacity": 0.7}, 具体设置方式请参考Raphael手册:http://raphaeljs.com/reference.html#Element.attr * - `axisStyle` 对象,设置坐标轴属性。3中坐标轴属性:domainAttr表示坐标轴线属性。tickAttr表示坐标轴标尺属性。tickTextAttr表示坐标轴文字属性。具体设置方式请参考Raphael手册:http://raphaeljs.com/reference.html#Element.attr * - `customEvent` 函数对象,其中有3个自定义函数。`brushstart` 函数,表示刚开始拖选区间的事件响应,默认为空函数; `brushend` 函数,表示拖选结束后的事件响应,默认为空函数; `brush` 函数,表示拖选时的事件响应,默认为空函数; 这些函数可以在创建对象或setOption()时一起设置,也可以通过on()函数单独设置。 * * @param {Node|String|jQuery} node 容器节点,文档节点、ID或者通过jQuery查询出来的对象 */ var Parallel = DataV.extend(DataV.Chart, { initialize: function (node, options) { this.type = "Parallel"; this.node = this.checkContainer(node); // Properties this.allDimensions = []; this.dimensions = []; this.dimensionType = {}; this.dimensionDomain = {}; this.dimensionExtent = {}; // Canvas this.defaults.width = 750; this.defaults.height = 500; this.defaults.marginWidth = [20, 20, 20, 20]; this.defaults.backgroundAttr = {"fill": "none", "stroke": "#ccc", "stroke-opacity": 0.4}; this.defaults.foregroundAttr = {"fill": "none", "stroke": "steelblue", "stroke-opacity": 0.7}; this.defaults.axisStyle = { domainAttr : {"stroke": "#000"},//坐标轴线 tickAttr : {"stroke": "#000"},//坐标轴标尺 tickTextAttr : {}//坐标轴文字 } this.defaults.customEvent = { "brushstart": function () {}, "brushend": function () {}, "brush": function () {} }; this.setOptions(options); this.createCanvas(); } }); /** * choose dimension * @param {array} dimen Array of column names */ Parallel.prototype.chooseDimensions = function (dimen) { var conf = this.defaults; this.dimensions = []; for (var i = 0, l = dimen.length; i end) { temp = start; start = end; end = temp; } start = Math.max(0, start + 0.5 - 0.5); end = Math.min(this.dimensionDomain[dimen].length, end + 0.5 + 0.5); return [start, end]; }; /*! * create canvas */ Parallel.prototype.createCanvas = function () { var conf = this.defaults; this.node.style.position = "relative"; this.canvas = Raphael(this.node, conf.width, conf.height); //console.log(this.canvas); }; /*! * get color */ Parallel.prototype.getColor = function (colorJson) { var colorM = DataV.getColor(); var color; var colorStyle = colorJson ? colorJson : {}; var colorMode = colorStyle.mode ? colorStyle.mode : 'default'; switch (colorMode){ case "gradient": var index = colorJson.index ? colorJson.index : 0; index = index <0 ? 0 : (index>colorM.length-1 ? colorM.length-1 : index); color = d3.interpolateRgb.apply(null, [colorM[index][0],colorM[index][1]]); break; case "random": case "default": var ratio = colorStyle.ratio ? colorStyle.ratio : 0; if(ratio <0 ){ratio=0;} if(ratio > 1) { ratio =1;} var colorArray =[]; for (var i=0, l=colorM.length; i