편집기로 인해 코드가 손상될 수 있으므로 온라인 데모를 제공합니다http://demo.jb51.net/chengxu/smipleChart.htm 코드 복사 코드는 다음과 같습니다. smipleChart <br><br>.cc{ <br>height:450px; width:800px; border:1px solid #999; position:relative; margin:20px; <br>} <br> <br>(function(doc,undefine){ <br>var win = this, <br>hasSVG = win.SVGAngle || doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/ feature#BasicStructure", "1.1"), <br>isIE = /msie/i.test(navigator.userAgent) && !win.opera, <br>path = hasSVG?'d':'path', <br> seal = hasSVG?'z':'e', <br>math = Math, <br>mathRound = math.round, <br>mathFloor = math.floor, <br>mathCeil = math.ceil, <br>mathMax = math.max, <br>mathMin = math.min, <br>mathAbs = math.abs, <br>mathCos = math.cos, <br>mathSin = math.sin, <br>M = 'M', <br>L = 'L'; <br><br>win.$ = function(Id){ <br>return document.getElementById(Id) <br>}; function(){ <br>var target = 인수[0] || {}, i = 1, length = 인수.length, deep = true, <br>if ( typeof target === "boolean" ) { <br>deep = target; <br>target = 인수[1] || {}; <br>i = 2; <br>} <br>if ( typeof target !== "object" && Object.prototype. toString.call(target)!="[객체 함수]") <br>target = {}; <br>for(;i<length>if ( (옵션 = 인수[ i ]) ! = null ) <br>for(옵션의 var 이름){ <br>var src = 대상[ 이름 ], copy = 옵션[ 이름 ]; <br>if ( target === copy ) <br>계속; <br>if ( deep && copy && typeof copy === "object" && !copy.nodeType ){ <br>target[ name ] = 인수.callee( deep, src || ( copy.length != null ? [ ] : { } ), 복사 ); <br>} <br>else if(copy !== undefine) <br>target[ name ] = copy; <br>} <br><br>} <br>반환 대상; <br>}; <br><br>win.each = 함수(객체, 콜백, args) { <br>var 이름, i = 0, 길이 = object.length; <br>if ( args ) { <br>args = Array.prototype.slice.call(arguments).slice(2); <br>if ( 길이 === 정의되지 않음 ) { <br>for ( 객체의 이름 ) <br>if ( callback.apply( 객체[ 이름 ],[name,object[ 이름 ]].concat(args) ) = == false ) <br>break; <br>} else <br>for ( ; i if ( callback.apply( object[ i ],[i,object[ i ]].concat(args)) === false ) // <br>break; <br>} else { <br>if ( 길이 === 정의되지 않음 ) { <br>for ( 객체의 이름 ) <br>if ( callback.call( 객체[ 이름 ], 이름, 객체[ 이름 ] ) == = 거짓) <br>break; <br>} else <br>for ( var value = object[0]; <br>i < length && callback.call( value, i, value ) !== false; value = object[ i] ){} <BR>} <BR>객체 반환; <BR>}; <BR>//---------------------------------- ------------------ <BR>function processPoint( x ){ <BR>return isIE ? ~~x.toFixed(0) : ~~x.toFixed(0) 0.5; <BR>}; <BR>function calTextLen(txt, cssStr){ <BR>varspan = doc.createElement('span'); <BR>if(cssStr){ <BR>cssStr 유형 === '문자열' <BR>? span.style.cssText = cssStr <BR>: 확장(span.style,cssStr); <BR>}else{ <BR>extend(span.style,{ <BR>fontSiz: '12px', <BR>fontFamily: '"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans- serif'<BR>}); <BR>} <BR>span.innerHTML = txt || ''; <BR>span.style.visibility = '숨김'; <BR>doc.body.appendChild(span); <BR>var 너비 =span.offsetWidth, <BR>높이 =span.offsetHeight; <BR>doc.body.removeChild(span); <BR>return {w:너비,h:높이}; <BR>}; <BR>함수 각도(r,center,o,jingdu){ <BR>var hudu = Math.PI*2*(o/360), <BR>x = center[0] r*Math.sin(hudu) , <BR>y = center[1] -r*Math.cos(hudu); <BR>return [x.toFixed(jingdu||0),y.toFixed(jingdu||0)]; <BR>} <BR><BR>function xx(a,b,lineNum){ <br><br>var t = 10000; <br>var stf = ((b*t-a*t)/lineNum)/t, <br>arr = [1,2,2.5,5,10], <BR>c = 1, <BR>v; <BR><BR>// 分割线的基数是 [1,2,2.5,5,10] 这个步骤是查找 间隔 属于哪个范围 <br>if(stf<arr[0]){ <br>while( stf<arr[0] ){ <BR>c = c*10; <BR>arr[0]=arr[0]/c; <BR>} <BR>각([1,2,2.5,5,10],function(i,o){ <BR>arr[i]= o/c; <BR>}); <BR>}else if(stf>arr[4]){ <br>while( stf>arr[4] ){ <br>c = c*10; <br>arr[4] = arr[4]*c; <br>} <br>각([1,2,2.5,5,10],function(i,o){ <br>arr[i]= o*c; <br>}); <br>} <br><br>//上side找到间隔后 找到间隔中最接近的一个 <br>each(arr,function(i,o){ <br>if(stf<o> v = o; <br>거짓 반환 <br>} <br>}); <br>//a 是最작은 <br>//b是最大 적인 <br>a = (a*t-mathAbs((a%v)*t))/t; <br>b = (b*t (b%v===0?0:(v-b%v))*t)/t; <br><br>//看看还剩几条线没有画 <br><br>var num = Math.max(0,lineNum - Math.round((b-a)/v)); <br><br>if(a>=0){ <br>//让图比较靠中间 <br>/*while(num!==0){ <br>num%2===0 <br>? a = (a*t-v*t)/t <br>: b = (b*t v*t)/t; <br>번호--; <br>}*/ <br><br>//坐标比较整数化 <br>if(a!=0&&num!=0){ <br>while(a!=0&&num!=0){ <br>a = (a*t-v*t)/t; <br>번호--; <br>if((a*t-v*num*t)/10000>0&&a ===0) <br>break; <br>} <br>} <br><br>if(num!=0){ <br>while(num!==0){ <br>b = (b*t v*t)/t <br>번호--; <br>} <br>} <br><br>}else{ <br>//让图比较靠中间 <br>/*while(num!==0){ <br>num%2=== 0 <br>? b = (b*t v*t)/t <br>: a = (a*t-v*t)/t <br>num--; <br>}*/ <br>//坐标比较整数化 <br>if(b<0&&num!=0){ <BR>while(b!=0&&num!=0){ <BR>b = (b* t v*t)/t; <BR>번호--; <BR>if((b*t v*num*t)/t<0&&a ===0) <BR>break; <BR>} <BR>}<BR>if(num!=0){ <BR>while(num!==0){ <BR>a = (a*t-v*t)/t <BR>num--; <BR>} <BR>} <br><br>} <BR>return {min:a,max:b,stf:v}; <BR>} <BR>//---------------------------- ------------------------------------- ------- <BR>//对svg vml元素的一些创建 修改属性 样式 删除 == 一些的操작품 <BR>win.Vector = function( ){}; <BR>win.Vector.prototype = { <BR>$c : function(graphic,nodeName){ <BR>this.element = this[0] = doc.createElementNS('http://www.w3.org/ 2000/svg', 노드이름); <BR>this.graphic = 그래픽; <BR>이것을 돌려주세요; <BR>}, <BR>attr: function(hash,val){ <BR>var elem = this.element, <BR>key, <BR>value; <BR>if(해시 유형 === '문자열'){ <BR>if(val === 정의되지 않음){ <BR>return elem.getAttribute(hash); <BR>}else{ <BR>elem.setAttribute(hash, val); <BR>이것을 돌려주세요; <BR>} <BR>} else { <BR>for(해시 키){ <BR>값 = 해시[키]; <BR>if(key === path){ <BR>value && value.join <BR>&&(value = value.join(' ')); <br><br>/(NaN| |^$)/.test(value) <BR>&&(value = 'M 0 0'); <BR>} <BR>elem.setAttribute(key, value) <BR>} <BR>} <BR> 이것을 반환합니다. <BR>}, <BR>css: function(hash){ <BR>var str = ''; <BR>for(var key in hash){ <BR>if(isIE && key == "opacity"){ <BR>this.element.style['filter'] = "alpha(opacity=" hash[key] * 100 ")"; <BR>}else{ <BR>this.element.style[key] = hash[key]; <BR>} <BR>} <BR>이것을 반환하세요. <BR>}, <BR>on: function(eventName, handler){ <BR>var self = this; <BR>this.element.addEventListener(eventName,function(){ <BR>handler.call(self) <BR>},false); <BR>이것을 돌려주세요; <BR>}, <BR>appendTo: function(parent){ <BR>if(parent){ <BR>parent.element <BR>? parent.element.appendChild(this.element) <BR>: parent.appendChild(this.element) <br><br>} else { <BR>this.graphic.container.appendChild(this.element); <BR>} <BR>이것을 반환하세요. <BR>}, <BR>addText: function(str){ <BR>var elem = this.element; <BR>if(elem.nodeName === 'text'){ <BR>elem.appendChild(doc.createTextNode(str.toString() || ' ')); <BR>} <BR>이것을 반환하세요. <BR>}, <BR>setOpacity: function(v){ <BR>this.attr('fill-opacity',v) <BR>}, <BR>toFront: function() { <BR>this.element .parentNode.appendChild(this.element) <BR> 이것을 반환합니다. <BR>}, <BR>표시: function(){ <BR>this.element.style.display = 'block'; <BR>이것을 돌려주세요; <BR>}, <BR>hide: function(){ <BR>this.element.style.display = 'none'; <BR>이것을 돌려주세요; <BR>} <BR>}; <BR>//---------------------------------- ------------------------------------- ---------------- <br><br><br><br>//------- ------------------------------------- ---------------- <BR>//如果是vml修改其中的一些방법 <BR>if(!hasSVG) { <BR>//-------------创建vml环境------ <BR>doc.createStyleSheet().addRule( ".vml", "동작:url(#default#VML);display:inline-block;position:absolute;left:0px;top:0px"); <BR>!doc.namespaces.vml && ! "v1"; <BR>doc.namespaces.add("vml", "urn:schemas-microsoft-com:vml"); <br><br>//-------------修改一些방법------ <BR>extend(Vector.prototype, { <BR>$c : function(graphic,nodeName){ <BR>var name = nodeName || 'shape'; <BR>this.element= this[0] = (name === 'div' || 이름 === 'span') <BR>? doc.createElement(name) <BR>: doc.createElement('<vml:' name ' class="vml">') <br>this.graphic = graphic; <br>return this; <br>}, <br>on : function(eventName, handler){ <br>var self = this <br>this.element.attachEvent("on" eventName,function() { <br>handler.call(self); <br>}); <br>return this; <br>}, <br>addText : function(txt){ <br>var elem = this.element; >elem.innerHTML = txt || <br>return this; <br>}, <br>setOpacity: function(v){ <br>this.opacity.opacity=v; }); <br>} <br>//---------------------------- ------------------------------------- -------- <br><br><br><br><br><br><br><br>//画图类 <br>//--------- ------------------------------------- - <br>win.smipleChart = function(){ <br>this.init.apply(this,arguments); <br>}; <br>smipleChart.prototype = { <br>옵션 : { <br>차트 : { <br>paddingRight : 20, <br>radius : 200, <br>style : { <br>fontFamily : '"Lucida Grande" , "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif', <br>fontSize: '12px', <br>배경: '#FFFFFF' <br>} <br>}, <br>제목: { <br>텍스트: '', <br>y: 10, <br>스타일: { <br>fontFamily:'Verdana,Arial,Helvetica,sans-serif', <br>fontSize:'16px', <br>fontWeight:'bold' <br>} <br>}, <br>subTitle: { <br>text: '', <br>y: 30, <br>style: { <br>fontFamily:'Verdana, Arial,Helvetica,sans-serif', <br>fontSize:'12px', <br>color: '#111' <br>} <br>}, <br>yUnit: { <br>text: '', <br>스타일: { <br>fontFamily:'Verdana,Arial,Helvetica,sans-serif', <br>fontSize:'12px', <br>color: '#111' <br>}, <br>lineNum :10 <br>} <br>}, <br>init : function(container,options,width,height){ <br>this.width = width || 컨테이너.오프셋폭; <br>this.height = 높이 || 컨테이너.오프셋높이; <br>this.mainGroup = {}; <br><br>//svg 도면에 svg 태그가 있어야 합니다. vml은 div를 사용합니다 <br>this.container = hasSVG <br>? new vector().$c(1,'svg') 🎜 >.attr({ <br>xmlns : 'http://www.w3.org/2000/svg', <br>버전 : '1.1' <br>}) <br>.css({fontSize : ' 12px '}) <br>.appendTo(container).element <br>: 새로운 벡터().$c(1,'div') <br>.css({ <br>fontSize : '12px', <br> 너비 : this.width 'px', <br>height : this.height 'px' <br>}) <br>.appendTo(container).element; <br>var c = extend(true,{}, this .options) <br>var opts = this.opts = extend(true,c,options), <br>style = extend(opts.charts.style,{ <br>width : this.width, <br>height : this.height <br>}); <br><br><br><br>//플레이트를 그릴 때 필요한 일부 매개변수를 계산합니다. <br>this.getDrawArea() <br>.createTooltip() //Create 프롬프트 메시지 프레임<br>.drawTitle() //제목 그리기<br>//플레이트 그리기<br><br>if('line,area,pie'.indexOf(opts.charts.type)>=0 ) { <br>opts.charts.panel = 'x'; <br>} <br><br>if(' Pie,pies'.indexOf(opts.charts.type)<0){ <br>this . drawPanel(); <BR>} <BR><br>this.drawLegend(opts.legend.type); //색상 블록 막대 그리기<br><br>var type = { <br>line : 'drawLine' <BR>area : 'drawArea', <BR>columns : 'drawColumns', <BR>pie : 'drawPie', <BR>pies : 'drawPies', <BR>segment : 'drawSegment' <BR>}[ opts .charts.type]; <BR>this[type](); <BR><br>}, <br>createElement : function(nodeName){ <BR>return new vector().$c(this,nodeName ) ; <BR>}, <BR>그룹: function(name){ <BR>return this.createElement(isIE?'div':'g').attr('mark',name), <BR>getDrawArea : function(){ <BR>var opts = this.opts, <BR>width = this.width, <BR>height = this.height, <BR>title = opts.title, <BR>subTitle = opts.subTitle, <BR>area = { <BR>// 좌표축 왼쪽의 눈금 텍스트 너비 제거(추정) 80은 고정 값이고 왼쪽의 간격은 80만 남깁니다. <BR>areaWidth : width - 80, <BR> // 좌표축 아래의 텍스트 및 표시 높이를 제거합니다. <BR>areaHeight : height - 40, <BR>//원점의 X 위치는 <BR>startX 아래에서 계산됩니다. 0, <BR>//원점의 Y 위치는 아래에서 계산됩니다. <BR>startY: 0, <BR>//원형 차트를 그릴 때 원의 중심 위치를 알아야 합니다. 🎜>centerX: 0, <BR>//원형 차트를 그리기 위한 중심의 y 좌표입니다. <BR>centerY: 0 <BR>}; <BR>//메인 제목이 있으면 메인 제목의 높이를 빼고, 그렇지 않으면 높이에서 10을 뺍니다. <BR>area.areaHeight -= (title.text !== '') <BR>? <br>: 10; <br><BR>// 자막 높이 제거 <BR>area.areaHeight -=(subTitle.text !== ' ') <BR>? subTitle.y <br>: 10 <br> <BR>area.startX = 80; <BR>area.startY = 높이 - 40; <BR><br>//원의 중심 위치<br>area.centerX = 너비 / 2; Area.centerY = height / 2; <BR><br>//오른쪽에 약간의 공간을 남겨두세요 <br>area.areaWidth -=20 <BR>//상단에도 약간의 공간을 남겨두세요 <BR>area .areaHeight -=15; <br><br>opts.area = <BR><BR>return this; <BR><br>}, <br>drawTitle: function(){ <br>var opts = this.opts, <br>self = this, <br>arr = [opts.title,opts.subTitle,opts.yUnit], <br>//세 개의 타이틀 좌표 위치에 대한 기본 매개변수 <BR>config = [ <BR>{ <BR>x : this.width / 2, <BR>y : opts.title.y <BR>}, <BR>{ <BR>x : this.width / 2, <BR>y : opts.subTitle.y <BR>}, <BR>{ <BR>x : opts.yUnit.x, <BR>y : this.height / 2 - 20 <BR>} <BR> ], <BR> tpanel = this.group('title') <BR>.appendTo(); <BR><BR>each(arr,function(i,title){ <BR>var text = title.text; <BR>if( text){ <BR>var elem = self.baseDraw('span',{ <br>'text-anchor':'left', <br>x : mathMax(config[i].x - calTextLen(text,title) .style).w/2,10), <BR>y : config[i].y <BR>},calTextLen(title.text,title.style).h) <BR>.css(title.style) <BR>.addText(text) <BR>.appendTo(tpanel); <BR><BR>//2이면 세로로 뒤집는다는 뜻입니다. <BR>if(i= ==2 ){ <BR>hasSVG <BR>? elem.attr({transform : 'rotate(270, ' (opts.yUnit.x 10) ', ' self.height / 2 ')'}) <br> : (elem .element.style.filter ='progid:DXImageTransform.Microsoft.BasicImage(rotation=3)') <br>} <BR><BR>} <BR>}) <BR> 이것을 반환합니다 <BR>}, <br><br><BR>//접시 그리는 게 더 귀찮다 <BR>drawPanel: function(type){ <BR>var opts = this.opts, <br>self = this, <br>area = opts.area, <BR>isSegment= opts.charts.type==='segment', <BR>//플레이트 유형은 가로 또는 세로입니다. <BR>type = opts.charts.panel || <BR><BR>// 바닥판<BR>var drawAreaWidth =area.areaWidth, <BR>drawAreaHeight =area.areaHeight, <BR>//원점 좌표 <br>startX =area.startX, <br> startY = Area.startY; <BR><BR>var allData = [], <BR>minValue = 0, <BR>maxValue = 10, <BR>lineNum = mathMax(opts.yUnit.lineNum,2), <br>min = opts.yUnit.min, <br>staff; <BR><BR>//모든 데이터 결합 <BR>each(opts.chartData,function(i,o){ <BR>isSegment <BR>? (o.data,function(j,d){ <br>allData[j] <br>? allData[j] = allData[j] (~~d) <BR>: allData[j] = ~~d ; <BR>}) <BR>: allData = allData.concat(o.data) <BR>}) <BR><BR>//아래 최대값과 최소값을 찾기 위해 모든 데이터를 정렬합니다. <BR>allData .sort(function(a,b){return a-b}); <BR><BR>//최대값과 최소값 찾기<br>maxValue = allData[allData.length - 1]; >각 (allData,function(i,o){ <br>if(o){ <BR>minValue = o; <br>return false; <br>} <BR>}); <br><br>//메인 플레이트 컨테이너<BR>this.panel = this.group('panel').appendTo() <br><br><BR>var dd = xx(minValue,maxValue , lineNum), <BR>min = dd.min, <BR>max = dd.max, <BR>f = dd.stf; <br><br>//가로좌표가 그려짐을 나타냅니다. <BR>if( type.toLowerCase()==='x'){ <BR>//Abscissa 단위 간격<BR>var xPices = drawAreaWidth / opts.xUnit.units.length, <BR>//단위 간격의 중심점<BR> offset = xPices / 2, <br><br>yPices = drawAreaHeight / lineNum <br><br><BR>//--------- -------- ------------가로 점과 텍스트 그리기------------ ------- ------------- <BR>각(opts.xUnit.units,function(i,d) { <BR>self.baseDraw( '경로',{ <BR>경계 : 1, <BR>borderColor : '#C0C0C0', <BR>isfill : false, <BR>경로 : [ <BR>M, <BR>processPoint(startX (i * xPices )), <BR>processPoint(startY), <BR>L, <BR>processPoint(startX (i*xPices)), <BR>processPoint(startY 5) <BR>] <BR>}). <BR>appendTo(self.panel); <BR>var y = hasSVG?5:10, <BR>span = self.baseDraw('span',{ <BR>x : startX 오프셋(i) * xPices), <BR>y : startY y, <BR>'text-anchor':'middle' <BR>}) <BR>.css({ <BR>fontFamily:'Verdana,Arial,Helvetica,sans- serif', <BR>fontSize: '12px' <BR>}) <BR>.addText(opts.xUnit.units[i]) <BR>.appendTo(self.panel) <BR>.element <br> <br>//vml에는 x y가 없습니다. 따라서 개념을 단순화하려면 나중에 범위를 사용할 때 범위 너비의 절반을 줄여야 합니다. <BR>!hasSVG <BR>span.style.left = parseInt(span.style.left ) -span.offsetWidth/2 'px' <br><br>}) <BR>//------------ -------세로 점과 텍스트 그리기 ------------------------- ------------ -------- <BR>for(i=0;i<=lineNum;i ){ <BR>self.baseDraw('path',{ <BR>border : 1, <BR>borderColor : '#C0C0C0', <BR>isfill : false, <BR>path : [M, startX, processPoint(startY - (i * yPices)), L, processPoint(startX drawAreaWidth), processPoint(startY - (i *yPices))] <BR>}) <BR>.css({zIndex:-10}) <BR>.appendTo( self.panel); <br><br>varspan = self.baseDraw('span',{ <BR>x : startX - 15, <BR>y : startY - i * yPices-calTextLen(min i*f ' ').h/2, <BR>'text -anchor':'middle' <BR>}) <BR>.css({ <BR>'font-family':'Verdana,Arial,Helvetica,sans-serif ', <BR>'글꼴 크기':' 12px', <BR>너비: '40px', <BR>디스플레이:'블록', <BR>textAlign:'right' <BR>}) <BR>. addText((min*1000(i*1000*f /1000)*1000)/1000 '') <BR>.appendTo(self.panel) <BR>.element <br><br>if(!hasSVG) { <BR>span.style.top =parseInt(span.style.top)span.offsetHeight/2 -5 'px';<BR>span.style.left =parseInt(span.style.left) -35'px ' <BR>} <BR>} <br> <br>}else{ <BR>//Abscissa 단위 간격<BR>var yPices = drawAreaHeight / (opts.xUnit.units.length), <BR>//The 단위 간격의 중심점<BR>offset = Math.round(yPices / 2) <br><br><br><br>var x = hasSVG?25:70, <BR>vv = hasSVG?0: 5; <br><br>각(opts.xUnit .units,function(i,d){ <br><br>self.baseDraw('path',{ <BR>border : 1, <BR>borderColor : '#C0C0C0', <BR>isfill : false, <BR>path : [ <BR>M, <BR>processPoint(startX-5), <BR>processPoint(startY-i * yPices), <BR>L, <BR>processPoint(startX), <BR>processPoint( startY-i * yPices), <BR>] <BR>}) <BR>.appendTo(self.panel) <BR>varspan = self.baseDraw( 'span',{ <BR>x : startX - x , <BR>y : startY -i * yPices-offset-calTextLen(d).h/2 vv, <BR>'text-anchor':'middle' <BR>}) <BR>.css({ <BR>fontFamily:'Verdana,Arial,Helvetica,sans-serif', <BR>fontSize:'12px', <BR>너비: '60px', <BR>textAlign :'right' <BR>}) <BR>.addText(d) <BR>.appendTo(self.panel) <br><br>}) <br><br><BR>var xPices = drawAreaWidth / lineNum; <br><br>for(var i= 0;i<=lineNum;i ){ <BR>self.baseDraw('path',{ <BR>border : 1, <BR>borderColor : '#C0C0C0 ', <BR>isfill : false, <BR>path : [ <BR>M, <BR>processPoint(startX (i * xPices)), <BR>processPoint(startY), <BR>L, <BR>processPoint (startX (i*xPices)), <BR>processPoint (startY - drawAreaHeight) <BR>] <BR>}) <BR>appendTo(self.panel) <br><br>varspan = self.baseDraw ('span',{ <BR>x : startX - calTextLen(min i*f '').w/2 i * xPices, <BR>y : startY, <BR>'text-anchor':'left' <BR>}) <BR>.css({ <BR>fontFamily:'Verdana,Arial,Helvetica,sans-serif', <BR>fontSize:'12px' <BR>}) <BR>.addText(최소 i* f '') <BR>.appendTo(self.panel ) <BR>.element <BR>} <br><br>} <br><br>//------------ ---------- -------------- ---------- ------------- <BR>//지역 지도를 그릴 때 필요한 것 시작점 <BR>//좌표가 음수일 가능성이 높고 0에서 시작하지 않을 수 있으므로 jianju <BR>var jianju =0 <BR>if(min>0)jianju = min; max<0)jianju = max; <BR>//시작 위치 계산 <BR>startX = opts.charts.panel==='x' ? startX :startX-xPices*(min/f) <BR>startY = opts.charts.panel=== 'x' ? startY yPices*(min/f) : startY; <BR><br>opts.draw = { <br>startX : startX, // X축 시작점<BR>startY : startY , // Y축 시작점 <BR>xPices : xPices, // X축 각 부분의 너비 <BR>yPices : yPices, // Y축 각 부분의 너비 <BR>offset : offset, // X 단일 중심점 위치의 오프셋 <BR>jianju : jianju*yPices/f, <BR>feed : f // Y축에 몇 개의 복사본이 있는지<BR>}; <BR>반납하세요 <BR>}, <br><br>createTooltip: function(){ <BR>//그룹<BR>this.tipC = this.group('tip') <BR>.css({zIndex: 200,height:'20px ',width:'20px',position:'absolute'}) <BR>.appendTo() <BR>.hide() <br><br>//상자 그리기 baseDraw <BR>this.tipBox = this. baseDraw('direct',{arc:0.22,fill:'#fff',border:2,borderColor:'#606060'}) <BR>.appendTo(this.tipC) <br><br>//svg 때문에 내부의 g는 직접 배치할 수 있지만 vml의 그룹 렌더링이 매우 느려서 div를 변경했습니다. 그래서 여기의 부모는 다릅니다 <BR>var p = isIE ?this.tipBox :this.tipC; 🎜>this.tipTxtContainer = this.baseDraw('text',{fill:'#000000',x:5,y:19,'text-anchor':'left'}) <br>.css({ <br>fontFamily:'Verdana, Arial,Helvetica,sans-serif', <BR>fontSize:'12px', <BR>배경: '#FFF' <BR>}) <BR>.appendTo(p) <BR> <BR>this.tipText = doc.createTextNode(''); <br>this.tipTxtContainer[0].appendChild(this.tipText); <br>return this; <BR>}, <BR>showTooltip: function( obj, x, y, 데이터){ <BR>var txt =obj.name ((' : ' data)||''), <BR>size = calTextLen(txt,this.tipTxtContainer[0].style.cssText ), <BR>pos = {x : x - (size.w 5 * 2)/2 ,y : y - 32} <BR>this.tipC <BR>.toFront() <BR>.show() ; <BR><BR>if(hasSVG){ <br>this.tipC.attr({transform:'translate(' pos.x ',' pos.y ')'}) <br><BR>this .tipBox <br>.attr({너비 : size.w 5 * 2, 높이 : size.h 5 * 2, 스트로크 : obj.color||'#606060'}) <br>}else{ <BR> this.tipC.css({left:pos.x,top:pos.y}); <BR><BR>this.tipBox <br>.css({width:size.w 5 * 2,height : size. h 5 * 2}) <br>this.tipBox[0].StrokeColor = obj.color||'#606060'; <BR>} <BR><BR>this.tipText.nodeValue = txt || <br>}, <br>hideTooltip: function(){ <BR>this.tipC.hide(); <BR>}, <BR><BR>drawLegend : function(type,redraw){ <br>var self = this, <br> opts = this.opts, <BR>//컬러 블록의 크기<BR>t_width = 20, <BR>t_height = 20, <BR>//블록 사이의 거리<BR> t_space = 5, <BR>datas = opts.chartData, <BR>len = datas.length, <BR>css = opts.legend.style, <BR><BR>//최대 길이 세로일 경우 최대 길이는 필수입니다 <br>maxWidth = 10 , <br>maxHeight = 30, <BR>//이 것의 위치<BR>orig_pos = opts.legend.pos?opts.legend.pos:[2,2], <BR><BR>//그룹 기능 표시 및 숨기기 <br>handle = function(i){ <br>var g = self.mainGroup['chart' i] <BR>if(g.show){ <BR>g.chart.hide(); <BR>g.show = false <BR>hasSVG <BR>? this.attr({fill:'#ccc'}) <BR>: this[0].style .color = '#ccc' <BR> }else{ <BR>g.chart.show(); <BR>g.show = <BR>hasSVG <BR>? 000'}) <BR>: this[ 0].style.color = '#000' <BR>} <BR>}, <BR><BR>arr = [] <br><br>type = type ||'측면'; <br>var legendPanel = self.group('Legend') <br>.appendTo() <BR>if(type===='측면'){ <BR>//If 수평 <BR>var top = orig_pos[1 ] 5, <BR>th = hasSVG?0:3, <BR>left = orig_pos[0] 5 <BR>each(datas, function(i,d){ <BR>left = i===0 ? left : t_space left <BR>//모든 왼쪽의 위치 계산 <BR>self.baseDraw('direct',{ <BR>arc : 0.1, <BR>fill : d.color, <BR>border : 1, <BR>borderColor : d.color, <BR>left : 왼쪽, <BR>top : top, <BR>width : t_width 'px', <BR>height : t_height 'px' <BR>}) <BR> .appendTo(legendPanel); <BR>left = left t_width 2 t_space <BR>var w = calTextLen(d.name,css).w <BR>self.baseDraw ('span',{ <BR>'text-anchor':'left', <BR>x : 왼쪽, <BR>y : 위쪽 <BR>}) <BR>.css(extend(css,{cursor :'포인터'})) <BR>.on ('click',function(){ <BR>if(opts.charts.type==='pies')return; <BR>handle.call(this,i ); <BR>}) <BR>.addText (d.name) <BR>.appendTo(legendPanel) <BR>left = left w; 'direct',{ <BR>arc: 0.1, <BR>fill: 'none', <br>border: 1.5, <br>borderColor: '#666666', <BR>width: left t_space- orig_pos[0] , <BR>height : maxHeight, <BR>left : orig_pos[0], <BR>top : orig_pos[1] <BR>}) <BR>.appendTo(legendPanel) <BR>}else{ <BR> <BR>var top = orig_pos[1] 5, <BR>th = hasSVG?0:3, <BR>left = orig_pos[0] 5 <BR>each(datas, function(i,d){ <br>top = i===0 ? top : t_space top; <br>self.baseDraw('ret',{ <BR>arc : 0.1, <BR>fill : d.color, <BR>border : 1, <BR>borderColor : d.color, <BR>left : 왼쪽, <BR>top : top, <BR>width : t_width 'px', <BR>height : t_height 'px' <BR>}) <BR>. AppendTo(legendPanel); <BR><BR>var h = calTextLen(d.name,css).h; <BR><BR>self.baseDraw('span',{ <BR>'text-anchor':' left', <br>x : 왼쪽 t_width 2 t_space , <br>y : 위쪽 <br>}) <br>.css(extend(css,{cursor:'pointer'})) <BR>.addText( d.name) <BR>.on('click',function(){ <BR>if(opts.charts.type==='pies')return; <BR>handle.call(this,i); <BR>}) <BR>.appendTo(legendPanel) ; <BR>top = top h t_space; <BR>maxWidth = Math.max(maxWidth,calTextLen(d.name,css).w); ; <BR>this.baseDraw('direct', { <BR>arc : 0.1, <BR>fill : 'none', <BR>border : 1.5, <BR>borderColor : '#666666', <BR>width : maxWidth 22 15, <BR>높이 : 상단 t_space -orig_pos[1], <BR>왼쪽 : orig_pos[0], <BR>상단 : orig_pos[1] <BR>}) <BR>.appendTo(legendPanel) ; <BR>} <BR>이것을 반환하세요. <BR>}, <BR>drawLine : function(){ <BR>var self = this, <BR>opts = this.opts; <BR>draw = opts.draw; <BR>each(opts.chartData,function(i,o) ){ <BR>var id = 'chart' i, <BR>lineGroup = self.group(id) <BR>.appendTo() <BR>self.mainGroup[id]={chart:lineGroup,show:true }; <BR>var 경로 = [M], <BR>data = o.data, <BR>line <br><br>for(var i = 0; i < data.length; i ){ <BR>if( data[i] == null){ <BR>//이 데이터가 존재하지 않고 첫 번째 데이터 경로가 아닌 경우 M을 추가하세요. <BR>if(path[path.length - 1] !== M ) <BR>path.push(M); <BR>}else{ <BR>//첫 번째 데이터 경로가 아닌 경우 L <BR>i !== 0 && path.push("L" 추가 ); <BR>//이전 항목이 null이고 첫 번째 항목이 아닌 경우 L <BR>if(i > 0 && data[i - 1] == null) <br>path.pop을 제거합니다. (); <br> //점의 x, y 위치 계산 <br>var x = draw.startX draw.offset (i * draw.xPices), <br>y = draw.startY - (data[i ] * (draw.yPices) / draw.feed)); <br>if(isIE){ <br>x =parseInt(x); <br>y=parseInt(y); .push(x); <br>path.push(y); <br>//점 그리기<br>self.baseDraw('circle',{ <br>x : x, <br>y : y, <br>r : 4, <br>fillColor : o.color <br>}) <br>.attr({data:data[i]}) <br>.css({zIndex:10,cursor:'pointer' }) <br>.on ('mouseover',(function(o,x,y){ <br>return function(){ <br>hasSVG <br>? (this[0].setAttribute('r', '5'),line.attr({'획-너비':2.5})) <br>: (this[0].스트로크웨이트 = 3,라인[0].스트로크 웨이트 = 2.5) <br>self.showTooltip (o,x,y, this.attr('data')); <br>} <br><br>})(o,x,y)) <br>.on('mouseout',function() { <br>hasSVG <br>? (this[0].setAttribute('r','4'),line.attr({'Stroke-width':1.5})) <br>: (this[0] .스트로크웨이트 = 1,라인[ 0].스트로크웨이트 = 1.5); <br>self.hideTooltip() <br>}) <br>.on('click',function(){lineGroup.toFront(); }) <br>.appendTo(lineGroup ); <br><br>} <br>}; <br>//폴리라인 그리기<br>line = self.baseDraw('path',{ <br>border : 1.5, <br>borderColor : o.color , <br>isfill : false, <br>path : path <br>}) <br>.css({zIndex:5}) <br>.on('mouseover',function (){ <br>hasSVG <br>? this.attr({'스트로크-너비':2.5}) <br>: (this[0].strokeWeight = 2.5) <br> .on('mouseout',function() { <br>hasSVG <br>? this.attr({'Stroke-width':1.5}) <br>: (this[0].trokWeight = 1.5); <br>}) <br>.on(' click',function(){lineGroup.toFront(); }) <br>.appendTo(lineGroup) <br>}) <br>return this; , <br>drawArea : function(){ <br>var self = this, <br>opts = this.opts, <br>draw = opts.draw; <br>each(opts.chartData,function(i,o) ){ <br>var id = 'chart ' i, <br>areaGroup = self.group(id).appendTo(); <br>self.mainGroup[id] = {chart:areaGroup,show:true}; 🎜>//경로가 2개 있는데 그 중 하나는 영역의 경로가 선의 경로입니다. <br><br>varareaPath = [M, (draw.startX draw.offset).toFixed(0), (draw .startY-draw.jianju).toFixed(0)], <br>path = [M], <br>data = o.data, <br>line <br>for(var n=0,l=data; .length;n<l;n ){ <br>/ /데이터가 비어 있는 경우 <BR>var len =areaPath.length <BR>if( data[n] === null){ <BR>// 이전 것이 m이 아니면 다시 그리므로 M <BR>if(path[path.length - 1] !== M) <BR>path.push(M) <BR><BR>//If 첫 번째 또는 이전 것은 황소입니다. 시작점 좌표를 수정하세요<BR>len===3 <BR>&&(areaPath[1] = (draw.startX (n 1)*draw.xPices draw.offset).toFixed( 0));//이전의 경우 영역 지도의 끝 식별자가 아닙니다. 첫 번째 데이터가 null이면 다음 작업이 수행되지 않습니다. <BR>if(areaPath[len - 1 ] !== seal&&n!==0){ <br>areaPath=areaPath.concat( [ <br>areaPath[len - 2], <BR>(draw.startY-draw.jianju).toFixed(0), <BR>seal <br>]); <br>} <BR>}else{ <BR>n !== 0 && path.push(L) <BR>areaPath.push(L)// 이전 데이터가 null인 경우 이전 L을 제거합니다<BR>if(n > ; 0 && data[n - 1] == null){ <BR>path.pop()<BR>// 첫 번째는 null이고 L은 삭제되지 않습니다. <BR>n!==1&&areaPath.pop() <BR>} <BR><BR>var x = draw.startX draw.offset (n * draw.xPices ), <BR>y = draw.startY - ((data[n]) * (draw.yPices / draw.feed)) <BR>if(isIE){ <BR>x = parseInt(x); >y = parsInt(y); <BR>} <BR>path.push(x); <BR>path.push(y) <br><br><BR>if(areaPath[len - 1] = == 봉인){ <BR>areaPath = AreaPath.concat([ <BR>M, <BR>x , <BR>parseInt(draw.startY-draw.jianju), <BR>L, <BR>x, <br>y <br>]); <BR>}else{ <BR>areaPath.push(x) ; <BR>areaPath.push(y) <BR><BR>// 마지막 지점 <BR>if(n === l - 1){ <BR><BR>areaPath.push(x) <BR><BR>areaPath.push(parseInt(draw.startY-draw.jianju) ); <BR>} <BR><BR>//점 그리기<br>self.baseDraw('circle',{ <br>x : x, <BR>y : y, <br>r : 4, <br>fillColor : o.color <br>}) <br>.attr({data:data[n] }) <BR>.on('mouseover',(function(o,x,y){ <br> return function(){ <br>hasSVG <BR>? (this[0].setAttribute('r', '5'),line.attr({'Stroke-width':2.5})) <BR>: ( this[0].스트로크웨이트 = 3,라인[0].스트로크웨이트 = 2.5); <BR>self.showTooltip (o,x,y,this.attr('data')) <BR>} <BR><BR>})(o,x,y)) <BR>.on('mouseout',function() { <BR>hasSVG <BR>? (this[0].setAttribute('r','4') ,line.attr({'Stroke-width':1.5})) <BR>: (this[0] .스트로크웨이트 = 1,라인[0].스트로크웨이트 = 1.5) <BR>self.hideTooltip() <BR>}) <BR>.on('click',function(){areaGroup.toFront(); }) <BR>.css({zIndex:10,cursor:'pointer'}) <BR>.appendTo(areaGroup); <br><br>} <BR>} <br><br>areaPath.push(seal) <br><br>self.baseDraw('path',{ <BR>border : 0, <BR>isfill : true, <BR>fillColor : o.color, <BR>불투명도 : 0.5, <BR>경로 :areaPath <BR>}) <BR>.css({zIndex:5}) <BR>.appendTo(areaGroup); <br><br>line = self.baseDraw('path',{ <BR>border : 2.5, <BR>borderColor : o.color, <BR>isfill : false, <BR>path : path <BR>} ) <BR>.on('mouseover',function(){ <BR>hasSVG <BR>? this.attr({'Stroke-width':2.5}) <BR>: (this[0].StrokeWeight = 2.5 ); <BR>}) <BR>.on('mouseout',function(){ <BR>hasSVG <BR>? this.attr({'획-너비':1.5}) <BR>: (this[ 0].StrokeWeight = 1.5); <BR>}) <BR>.on('click',function(){areaGroup.toFront(); }) <BR>.css({zIndex:-1}) <BR>.appendTo(areaGroup); <BR>}); <BR>이것을 돌려주세요; <BR>}, <BR>drawColumns : function(){ <BR>var self = this, <BR>opts = this.opts, <BR>draw = opts.draw, <BR>chartData = opts.chartData, <BR>dataLen = ChartData.length, <BR>//多个柱子 间的间距 <BR>columnSpace = 3, <BR>//一个位置中 所有间隔之와 <BR>columnPadding = columnSpace * dataLen columnSpace, <BR>//每个柱子의 크기 <BR>columnSize = self.opts.charts.panel==='x' <BR>? Number(((draw.xPices -columnPadding) / dataLen).toFixed(0)) <BR>: Number(((draw.yPices -columnPadding) / dataLen).toFixed(0)); <br><br>각(chartData, function(i,o){ <BR>var data = o.data, <BR>id = 'chart' i, <BR>isX = opts.charts.panel=== 'x', <BR>colGroup = self.group(id).appendTo(), <BR>//每个点开始的位置 <BR>start = self.opts.charts.panel==='x' <BR>? draw.startX 컬럼스페이스 i*(columnSize 컬럼스페이스) <BR>: draw.startY 컬럼스페이스 i*(columnSize 컬럼스페이스) <br><br>self.mainGroup[id] = {chart:colGroup,show:true}; <br><br>for(var j = 0,l=data.length; j < l ; j ){ <BR>if(data[j]===null) continue;横盘子 <BR>if(isX){ <BR>var x = Number((start j *draw.xPices ).toFixed(0)), <BR>y = Number((draw.startY).toFixed(0 )), <BR>height = Number((data[j] * (draw.yPices / draw.feed)).toFixed(0)), <BR>path = [ <BR>M, <BR>x, <BR>y, <BR>L, <BR>x, <BR>y -height, <BR>L, <BR>x 컬럼 크기, <BR>y - 높이, <BR>L, <BR>x 컬럼 크기, <BR>y, <BR>seal <BR>]; <BR>var pos = [x 컬럼 크기/2,data[j]>0?y-height:draw.startY] <br>}else 🎜><br>var x = Number((draw.startX).toFixed(0)), <br>width = Number((data[j]*((draw.xPices / draw.feed))).toFixed( 0)), <br>y = Number((start - (j 1) *draw.yPices ).toFixed(0)), <br>path = [ <br>M, <br>x, <br>y , <br>L, <br>x 너비, <br>y , <br>L, <br>x 너비, <br>y 컬럼 크기, <br>L, <br>x , <br>y 컬럼 크기, <br>인감 <br>]; <br>var pos = [draw.startX 너비/2,y-columnSize]; <br>} <br><br>self.baseDraw('path',{ <br>border : 0, <br>isfill : true, <br>fillColor : o.color, <br>opacity : 1, <br>경로 : 경로 <br>}) <br>.attr({data:data[j]}) <br>.css({zIndex:5,cursor:'pointer'}) <br>.on(' mouseover',(function(x,y,d){ <br><br>return function(){ <br><br>this.setOpacity(0.85); <br><br>self.showTooltip(o,x ,y,this.attr('data')) <br>} <br><br>})(pos[0],pos[1],data[j]) <br><br>) <br>.on('mouseout',(function(x,y){ <br>return function(){ <br>this.setOpacity(1); <br>self.hideTooltip(); <br>} <br> })(x,y)) <br>.appendTo(colGroup); <br><br>} <br>}); <br>이것을 돌려주세요; <br>}, <br>drawPie : function(){ <br>var self = this, <br>opts = this.opts, <br>area = opts.area, <br>rx =area.centerX, <br>ry =area.centerY, <br>inc = 0, <br>total = 0, <br>data = [], <br>cumulative = -0.25, // 맨 위에서 시작; <br>circ = 2 * Math.PI, <br>radiu = mathMin(opts.charts.radius,mathMin(area.areaWidth/2,area.areaHeight/2)), <br>fraction, <br>half_fraction; <br><br>each(opts.chartData,function(i,o){ <br>o.data 유형 ==='객체' <br>? (data.push((function(o){ <br> var all =0; <br>for(var i in o) <br>all =~~o[i] <br>모두 반환 <br>})(o.data))) <br>:data.push (mathAbs(o.data)) <br><br>}); <br><br>각(data,function(i,o){ <br>total = total o; <br>}); <br><br>각(data,function(i,o){ <br>var PieGroup = self.group('chart' i).appendTo(), <br>s = inc/total*360, <br>e = (inc o)/total*360, <br>name = opts.chartData[i].name, <br>size = calTextLen(name), <br>dot = angle(radiu,[rx,ry] ,s (e-s)/2,2), <br>x = rx (dot[0]-rx)/2 - size.w/2, <br>y = ry (dot[1]-ry)/2 - size.h/2, <br>len = Math.sqrt((x-rx)*(x-rx) (y-ry)*(y-ry)), <br>moveDisplacement = ((x-rx )*8/len) ',' ((y-ry)*8/len); <br><br>inc = inc o <br><br>var value = Number(o); = 합계 ? 값 / 합계 : 0; <br>half_fraction = 합계 ? (값 / 2) / 합계 : 0 <br><br>var start = 누적 * circ; 누적 = 분수; <br><br>var end = 누적 * 원 <br><br>self.baseDraw('pie',{ <br>config : opts.chartData[i], <br>s : 시작 , <br>e : end, <br>r : radiu, <br>innerR : 0 <br>}) <br>.css({zIndex:5,cursor:'pointer'}) <br>.attr( {move:moveDisplacement}) <br>.on('mouseover',function(){ <br>this.setOpacity(0.85); <br>}) <br>.on('mouseout',function(){ <br>this.setOpacity(1); <br>}) <br>.on('click',function(){ <br>var m = this.attr('move') <br>if(m.indexOf(' ')>0){ <br>hasSVG <br>? this.attr({ <br>변환: 'translate(0,0)' <br>}) <br>: this.css({ <br>왼쪽: '0px', <br>top: '0px' <br>}) <br>this.attr({move:m.replace(' ','')}) <br><br>}else{ <br>var s= m.split( ','); <br>hasSVG <br>? this.attr({ <br>transform: 'translate(' m ')' <br>}) <br>: this.css({ <br>왼쪽: s[0] 'px', <br>top : s[1] 'px' <br>}) <br><br>this.attr({move:m ' '}) <br>} <br>}) <br>.appendTo(pieGroup); <br><br>self.mainGroup['chart' i] = {chart:pieGroup,show:true}; <br><br>self.baseDraw('span',{ <br>x : x, <br>y : y, <br>fill : '#fff', <br>'text-anchor':'left ' <br>}) <br>.css({ <br>fontFamily : 'Verdana,Arial,Helvetica,sans-serif', <br>fontSize : '12px', <br>위치 : 'absolute', <br>color : '#fff', <br>zIndex : 10 <br>}) <br>.addText(name) <br>.appendTo(pieGroup); <br>}); <br><br>}, <br>drawPies : function(){ <br><br>var self = this, <br>opts = this.opts, <br>area = opts.area, <br>rx =area.centerX, <br>ry =area.centerY, <br>total = 0, <br>data = [], <br>chartData = opts.chartData, <br>cumulative = -0.25, // 시작 위치 맨 위; <br>circ = 2 * Math.PI, <br>radiu = mathMin(opts.charts.radius,mathMin(area.areaWidth/2,area.areaHeight/2)), <br>fraction, <br>half_cumulative, <br>반분수; <br><br>각(chartData,function(i,o){ <br>각(o.data,function(j,d){ <br>data[j] <br>? data[j] =mathAbs (d) <br>: 데이터[j] =mathAbs(d) <br>}) <br><br>}); <br>//看多少个数据来生成来生成内半径 <br>var len = data.length, <br>innerSpace = radiu / 10; <br>Rpice = (radiu - innerSpace) / len, <br>piesGroup = this.group('pies').appendTo(); <br><br>각(data,function(i,d){ <br>var inc = 0 ; <br>if(d===0) return; <br>각(chartData,function(j,o) ){ <br>if(~~o.data[i]===0)return; <br>var outR = radiu - Rpice * i, <br>innerR = radiu - Rpice * (i 1), <br>value = ~~o.data[i], <br>fraction = value / d; <br>half_fraction = (value/2)/d, <br>start = 누적 * 원, <br>s = inc/ d*360, <br>e = (inc 값)/d*360; <br><br>inc = inc 값 <br>var name = o.name, <br>size = calTextLen(이름), <br>dot = angle(radiu,[rx,ry],s (e-s)/2,2), <br>px = dot[0]>rx?1:-1, <br>py = dot[1 ]>ry?1:-1; <br>var x = rx px*innerSpace ((dot[0]-rx-px*innerSpace)/len)*(len-i-1) ((dot[0] -rx-px*innerSpace)/len)/2- size.w/2, <br>y = ry py*innerSpace ((dot[1]-ry-py*innerSpace)/len)*(len-i- 1) ((dot[1]-ry-py*innerSpace)/len)/2- size.h/2; <br><br>half_cumulative = 누적 절반_분수, <br>누적 = 분수, <br>end = 누적 * circ; <br><br>self.baseDraw('pie',{ <br>config : o, <br>s : start, <br>e : end, <br>r : outR, <br> innerR : innerR <br>}) <br>.css({zIndex:5,cursor:'pointer'}) <br>.on('mouseover',function(){ <br>this.setOpacity(0.85); <br>}) <br>.on('mouseout',function(){ <br>this.setOpacity(1); <br>}) <br>.appendTo(piesGroup); <br>self.baseDraw('span',{ <br>x : x, <br>y : y, <br>fill : '#fff', <br>'text-anchor':'left' <br>}) <br>.css({ <br>fontFamily : 'Verdana,Arial,Helvetica,sans-serif', <br>fontSize : '12px', <br>위치 : 'absolute', <br>color : '#fff', <br>zIndex : 10 <br>}) <br>.addText(name) <br>.appendTo(piesGroup); <br><br>}) <br>}); <br><br>}, <br>drawSegment : function(){ <br>var self = this, <br>opts = this.opts, <br>draw = opts.draw, <br>chartData = opts. ChartData, <br>columnPad = 5, <br>columnWidth = draw.xPices - columnPad * 2; <br><br>각(chartData,function(i,c){ <br><br><br>}); <br>}, <br>baseDraw : function(type,config){ <br>var self = this <br>arg = 인수; <br>return { <br>Rect : function(){ <br>var set = {}; <br>set.rx = set.ry = config.arc*30 || 5; <br>set.width = config.width || 50; <br>set.height = config.height || 50; <br>set.fill = config.fill || '#fff'; <br>set['fill-opacity'] = config.opacity || 0.85; <br>set['획-너비'] = config.border || 2; <br>set.Stroke = config.borderColor || '#606060'; <br>set.transform = 'translate(' (config.left||0) ',' (config.top||0) ')'; <br>return self.createElement('direct') <br>.attr(set) <br><br>}, <br>text : function(){ <br>return self.createElement('text') <br>.attr(config) <br>}, <br>span : function(){ <br>var elem= self.createElement('text') <br>.attr(config) <br>.attr({ <br>y : config.y (arg[2]||15) <br>}) <br>return elem; <br>}, <br>경로 : function(){ <br>var set = {}; <br>설정['획-너비'] = config.border; <br>set.Stroke = config.borderColor || '#C0C0C0'; <br>set.fill = config.isfill?config.fillColor:'없음'; <br>set.d = config.path; <br>config.opacity <br>&&(set['fill-opacity'] = config.opacity); <br><br>return self.createElement('path') <br>.attr(set); <br>}, <br>circle : function(){ <br>var set = {}; <br>set.cx = config.x; <br>set.cy = config.y; <br>set.r = config.r; <br>set.fill = config.fillColor; <br>return self.createElement('circle') <br>.attr(set); <br>}, <br>pie : function(){ <br>//config,s,e,r,index <br>var opts = self.opts, <br>s = config.s, <br>r = config. r, <br>e = config.e - 0.000001, <br>id = '차트' config.index, <br>area = opts.area, <br>rx =area.centerX, <br>ry = 면적. centerY, <br>cosStart = mathCos(s), <br>sinStart = mathSin(s), <br>cosEnd = mathCos(e), <br>sinEnd = mathSin(e), <br>color = config.config .color, <br>innerR = config.innerR, <br>longArc = e - s < 수학.PI? 0 : 1, <BR>경로 = [ <BR>M, <BR>rx r * cosStart, <BR>ry r * sinStart, <BR>'A', <BR>r, <BR>r, <BR>0, <BR>longArc, <BR>1, <BR>rx r * cosEnd, <BR>ry r * sinEnd, <BR>L, <BR>rx innerR * cosEnd, <BR>ry innerR * sinEnd, <BR>'A', // arcTo <BR>innerR, // x 반경 <BR>innerR, // y 반경 <BR>0, // 경사 <BR>longArc, // 길거나 짧은 호 <BR> 0, // 시계 방향 <BR>rx innerR * cosStart, <BR>ry innerR * sinStart, <BR>'Z' <BR>]; <br><br>return self.baseDraw('path',{ <BR>border : 1, <BR>border : '#fff', <BR>isfill : true, <BR>fillColor : color, <BR> 불투명도 : 1, <BR>경로 : 경로 <br><br>}) <br><br>} <BR>}[유형](); <BR>} <BR>}; <br><br>//-------------------------------------------- ------------------------------------- ------- <BR>//如果是vml 修改smipleChart.prototype中的一些방법 <BR>!hasSVG <BR>&&extend(smipleChart.prototype,{ <BR>baseDraw : function(type,config){ <BR>var self = this, <BR>width = this.width, <BR>height = this.height, <BR>name = 인수[2] <BR>return { <BR>Rect : function(){ <BR>var attr = {}, <BR>css = {}; <BR>attr.arcsize = config.arc || 0.2 '' <BR>if(config.fill==='none'){ <BR>attr.filled = 'f' <BR>}else{ <BR>attr.filled = 't'; <BR>attr.fillcolor = config.fill <BR>} <br> <br>attr.StrokeWeight = config.border || 2; <BR>attr.StrokeColor = config.borderColor || '#606060'; <BR>css.width = config.width || >css.height = config.height || 50 'px'; <BR>css.zIndex = 10; <BR>css.left = config.left||0 'px'; top ||0 'px'; <BR><BR>return self.createElement('roundect') <br>.attr(attr) <br>.css(css) <BR>}, <BR>text: 함수 (){ <BR>return self.createElement('TextBox') <BR>.attr({inset : "2px,2px,2px,2px" }) <BR>}, <BR>span : function(){ <BR>self.createElement('span')을 반환합니다. <BR>css({ <BR>위치:'절대', <BR>왼쪽: config.x 'px', <BR>상단: config.y 'px' <BR>}) <BR>}, <BR>path : function(){ <BR>var attr = {}, <BR>css = { <BR>width : width 'px', <BR>height : height 'px' <BR>}; <BR><BR>if(config.border===0){ <br>attr.Stroked = 'f'; <br>attr.StrokeWeight =0; <BR>}else{ <BR>attr.StrokeWeight = config.border||1 ; <BR>} <BR>attr.StrokeColor = config.borderColor || "#C0C0C0"; <BR>attr.filled = config.isfill?'t':'f'; <BR>attr.filled==='t' <BR>&&(attr.fillcolor=config.fillColor||"#C0C0C0"); <BR>attr.coordsize = 너비 ',' 높이; <BR>attr.path = 구성.경로; <BR>var elem = self.createElement() <BR>.attr(attr) <BR>.css(css); <BR>if(config.opacity){ <BR>var fill = self.createElement('fill') <BR>.attr({ <BR>type : 'fill', <BR>color : config.fillColor|| "#C0C0C0", <BR>불투명도 : config.opacity <BR>}) <BR>.appendTo(elem); <BR>//那这个对象的一个属性引用设置透명명한 元素 以后会用到 <BR>elem.opacity = fill[0]; <BR>} <BR>return 요소; <BR><BR>}, <br>원 : 함수(){ <br>var attr ={ <BR>스트로크 무게 : 1, <BR>좌표 크기 : 너비 ',' 높이, <BR>채움 : 't' <BR>}, <BR>css ={ <BR>너비 : 너비 'px', <BR>높이 : 높이 'px' <BR>} <BR>x = config.x, <BR>y = config. y, <BR>r = config.r; <BR>attr.StrokeColor=attr.fillcolor = config.fillColor <BR><BR>attr.path =[ <br>'wa', // 시계방향arcto <br>x - r, // 왼쪽 <BR>y - r, // 위쪽 <BR>x r, // 오른쪽 <BR>y r, // 아래쪽 <BR>x r, // 시작 x <BR>y, // y 시작 <BR>x r, // 끝 x <BR>y, // y 종료 <BR>'e' // 닫기 <BR>]; <BR>return self.createElement() <BR>.attr(attr) <BR>.css(css) <BR>}, <BR>pie : function(){ <BR>////config,s,e,r,index <br><br>var opts = self.opts, <BR>area = opts.area, <BR>r = config.r, <BR>rx = 지역.centerX, <BR>ry = 지역.centerY, <BR>innerR= config.innerR||0, <BR>sDot = 각도(r,[rx,ry) ],s,2), <BR>eDot = 각도(r,[rx,ry],e,2), <BR>color = config.config.color, <BR>s = config.s, <BR> e = config.e, <BR>e = e - s == 2 * Math.PI ? e - 0.001 : e, <BR>cosStart = mathCos(s), <BR>sinStart = mathSin(s), <BR>cosEnd = mathCos(e), <BR>sinEnd = mathSin(e), <br><br><BR>path = [ <BR>'wa', // 시계 방향으로 <BR>(rx - r).toFixed(0), // 왼쪽 <BR>(ry - r).toFixed(0), / / 상단 <BR>(rx r).toFixed(0), // 오른쪽 <BR>(ry r).toFixed(0), // 하단 <BR>(rx r * cosStart).toFixed(0), / / x 시작 <BR>(ry r * sinStart).toFixed(0), // y 시작 <BR>(rx r * cosEnd).toFixed(0), // x 종료 <BR>(ry r * sinEnd) .toFixed(0), // y 끝 <br><br>'at', // 시계방향 arcto <BR>(rx - innerR).toFixed(0), // 왼쪽 <BR>(ry - innerR).toFixed (0), // 위쪽 <BR>(rx innerR).toFixed(0), // 오른쪽 <BR>(ry innerR).toFixed(0), // 아래쪽 <BR>(rx innerR * cosEnd).toFixed (0), // x 시작 <BR>(ry innerR * sinEnd).toFixed(0), // y 시작 <BR>(rx innerR * cosStart).toFixed(0), // x 종료 <BR>( ry innerR * sinStart).toFixed(0), // y 종료 <br><br>'x', // 경로 종료 <BR>'e' // 닫기 <BR>]; <br><br>return self.baseDraw('path',{ <BR>border : 1, <BR>border : '#fff', <BR>isfill : true, <BR>fillColor : color, <BR> 불투명도 : 1, <BR>경로 : 경로 <BR>}) <br><br>} <BR>}[type](); <BR>} <BR>}); <br><br>//-------------------------------------------- ------------------------------------- ------- <BR>})(문서); <br><br>window.onload = function(){ <BR>var config = { <BR>charts : { <BR>type : 'line', <BR>radius : 150, <BR>panel : 'x ', <BR>style: { <BR>fontFamily: '"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif', // 기본 글꼴 <BR>fontSize: '12px' <BR>} <BR>}, <BR>제목 : { <BR>text : '线性图标' , <BR>y : 10, <BR>style : { <BR>color: 'black', <BR>fontSize: '16px' <BR>} <BR>}, <BR>subTitle : { <BR>text : '线性图标副标题', <BR>y : 35, <BR>style: { <BR>color: '#111 ', <BR>fontSize: '12px' <BR>} <BR>}, <BR>legend : { <BR>enable : true, <BR>//type : '측면', // 측면 横向 或 세로 纵向<BR>유형: '측면', <BR>pos: [10,10], <BR>스타일:{ <BR>fontFamily: '"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans -serif', // 기본 글꼴 <BR>fontSize: '12px', <BR>magin:'0px' <BR>} <BR>}, <BR>yUnit : { <BR>text : '线性图标侧标题', <BR>x : 20, <BR>style: { <BR>color : '#111', <BR>fontSize : '12px' <BR>} <BR>}, <BR>xUnit : { <BR>단위: [ <BR>'일월', <BR>'이월', <BR>'삼월', <BR>'사월', <BR>'오월', <BR>'六월 ', <BR>'七月', <BR>'八月', <BR>'九月', <BR>'十月', <BR>'十一月', <BR>'十two月' <BR>] <BR>}, <BR>chartData : [ <BR>{ <br><br>name : 'xcv', <BR>color : '#4572A7', <BR>data : [-18 ,45,-38,29,95,-45,77] <BR>}, { <br><br>이름: 'frfr', <BR>색상: '#AA4643', <BR>데이터: [- 44,12,78,-100,13,4,-56,-34] <BR>}, { <BR>이름: 'AAAAA', <BR>색상: '#89A54E', <br><br> 데이터: [null,78,83,null,22,-78,2,44,78] <BR>}, { <BR>이름: 'BBBB', <BR>색상: '#80699B', <BR> 데이터: [null, 58, 35, null, 52, 47, 26, -55, 39, 123,15,66] <BR>} <BR>] <BR>}; <br><br>new smipleChart($('line'),config); <BR>config.charts.type ='지역'; <BR>config.title.text ='区域图标' <BR>config.subTitle.text='区域图标副标题' <BR>config.yUnit.text ='区域图标侧标题' <br><br>new smipleChart ($('지역'),구성); <BR>config.title.text ='柱状图标' <BR>config.subTitle.text='柱状图标副标题' <BR>config.yUnit.text ='柱状图标侧标题' <BR>config.charts.type ='열'; <BR>config.chartData =[ <BR>{ <br><br>이름 : 'xcv', <BR>색상 : '#4572A7', <br><br>데이터 : [-0.01,-0.62,0 ,0.55,null,0.78,-0.63,-0.82,null,null,0.33] <BR>}, { <br><br>이름: 'frfr', <BR>색상: '#AA4643', <BR> 데이터: [-0.22,0.82,0.55,1.32,0.33,0.95,null,1,0.65,null,0.78] <BR>}, { <BR>이름: 'AAAAA', <BR>색상: '#89A54E' , <br><br>데이터: [null,0.62,0.34,null,0.63,0,-0.23,-1,0.62,0.45,null,-0.56] <BR>} <BR>] <br><br>new smipleChart($('zhu'),config); <BR>config.charts.panel='y' <BR>new smipleChart($('zhu1'),config); <BR>config.charts.type ='파이'; <BR>config.title.text ='饼图图标' <BR>config.subTitle.text='饼图图标副标题' <BR>config.yUnit.text ='' <BR>config.legend.type=' 세로로'; <BR>config.chartData =[ <BR>{ <br><br>이름 : 'aaa', <BR>색상 : '#4572A7', <br><br>데이터 : [433,123,null,66] <BR>}, { <br><br>이름: 'bbb', <BR>색상: '#AA4643', <BR>데이터: [45,33,33,511] <BR>}, { <BR>이름: 'ccc', <BR>색상: '#89A54E', <br><br>데이터: [55,null,75,333] <BR>}<BR>] <BR>config.legend.pos= [680,30] <BR>new smipleChart($('pie'),config) <BR>config.charts.type ='pies'; config.title.text ='다층 원형 차트 아이콘' <BR>config.subTitle.text='다층 원형 차트 아이콘 자막' <BR>config.legend.type='측면' <BR>config. legend.pos= [330,400] <BR>new smipleChart($('pies'),config) <BR><br><br>config.chartData =[ <BR>{ <BR><br>name : ' xcv' , <br>색상 : '#4572A7', <BR><br>데이터 : [433,355,275,null,588,323,576,32,99] <br>}, { <BR><br>이름: 'frfr', <br>색상: '#AA4643', <BR>데이터: [45,666,100,null,677,56,88,633,55,64] <BR>}, { <BR>이름: 'AAAAA', <BR>색상: '# 89A54E', <BR><br>데이터: [55,162,75,null,364,0,637,112,163,615] <br>} <BR>] <BR>config.yUnit.lineNum = 2; <BR>config.title. text = '상대적으로 작음' <BR>config.subTitle.text='2줄만 설정됨' <BR>config.yUnit.text ='퀴즈 제목' <BR><br>config.charts.type =' 줄 '; <br>config.legend.pos= [10,10] <BR>new smipleChart($('vv'),config) <BR>config.yUnit.lineNum = 10; 패널 = 'x'; <BR>config.charts.type ='segment';//new smipleChart($('segment'),config) <BR><BR>/ 스크립트> <br></body> <br></html></o></length> </div>