Sokongan carta linear, carta kawasan, carta bar, carta pai Sokong berbilang penyemak imbas Vml svg terpakai Salin kod Kod adalah seperti berikut: http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> http://www.w3.org/1999/xhtml"> smipleChart <br> .cc{<br> height:450px; width:800px; border:1px solid #999; position:relative; margin:20px;<br> }<br> <br> (fungsi(doc,undefined){<br> var win = ini,<br> uuuid = -1, <br> hasSVG = menang.SVGAngle || doc.implementation.hasFeature("<a href="http://www.w3.org/TR/SVG11/feature#BasicStructure">http://www.w3.org/TR/SVG11/feature#BasicStructure</a>", "1.1"),<br> isIE = /msie/i.test(navigator.userAgent) && !win.opera,<br> laluan = hasSVG?'d':'path',<br> meterai = mempunyaiSVG?'z':'e',<br> matematik = Matematik,<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> menang.$$ = fungsi(Id){<br> pulangkan document.getElementById(Id);<br> };<br> win.extend = function(){<br> var target = arguments[0] || {}, i = 1, length = arguments.length, deep = true, pilihan;<br> jika ( jenis sasaran === "boolean") {<br> dalam = sasaran;<br> sasaran = hujah[1] || {};<br> i = 2;<br> }<br> jika ( jenis sasaran !== "objek" && Object.prototype.toString.call(target)!="[object Function]")<br> sasaran = {};<br> untuk(;i<panjang;i ){<br /> jika ( (pilihan = hujah[ i ]) != batal )<br /> for(nama var dalam pilihan){<br /> var src = sasaran[ nama ], salinan = pilihan[ nama ];<br /> jika ( sasaran === salin )<br /> teruskan;<br /> jika ( dalam && salin && jenis salinan === "objek" && !copy.nodeType ){<br /> target[ name ] = arguments.callee( deep, src || ( copy.length != null ? [ ] : { } ), copy );<br /> } <br /> else if(copy !== undefined)<br /> sasaran[ nama ] = salinan; <br /> }<br /> <br /> }<br /> sasaran pulangan; <br /> };<br /> <br /> win.each = fungsi ( objek, panggil balik, args ) { <br /> nama var, i = 0, panjang = objek.panjang; <br /> jika ( args ) {<br /> args = Array.prototype.slice.call(arguments).slice(2);<br /> jika ( panjang === tidak ditentukan ) { <br /> untuk ( nama dalam objek ) <br /> if ( callback.apply( object[ name ],[name,object[ name ]].concat(args) ) === false ) <br /> pecah; <br /> } lain<br /> untuk ( ; i < panjang; i ) <br /> if ( callback.apply( object[ i ],[i,object[ i ]].concat(args)) === false ) //<br /> pecah; <br /> } lain { <br /> jika ( panjang === tidak ditentukan ) { <br /> untuk ( nama dalam objek ) <br /> if ( callback.call( object[ name ], name, object[ name ] ) === false ) <br /> pecah; <br /> } lain<br /> untuk ( nilai var = objek[0]; <br /> i < panjang && panggil balik.panggilan( nilai, i, nilai ) !== palsu; nilai = objek[ i] ){} <br /> } <br /> objek kembali; <br /> }; <br /> <br /> win.contains = fungsi(p,c){<br /> if(!p||!c)return false;<br /> jika(p===c) kembali benar;<br /> kembalikan isIE<br /> ? p.mengandungi(c)<br /> : p.compareDocumentPosition(c)==20<br /> ? benar<br /> : palsu;<br /> };<br /> //------------------------------------------------ ---------------<br /> function processPoint( x ){<br /> pulangkan isIE ? ~~x.toFixed(0) : ~~x.toFixed(0) 0.5;<br /> };<br /> fungsi calTextLen(txt, cssStr){<br /> var span = doc.createElement('span');<br /> if(cssStr){<br /> typeof cssStr === 'rentetan' <br /> ? span.style.cssText = cssStr <br /> : extend(span.style,cssStr);<br /> }lain{<br /> lanjutkan(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 = 'tersembunyi'; <br /> doc.body.appendChild(span); <br /> var width = span.offsetWidth,<br /> ketinggian = span.offsetHeight;<br /> doc.body.removeChild(span);<br /> kembalikan {w:width,h:height};<br /> };<br /> sudut fungsi(r,pusat,o,jingdu){<br /> var hudu = Math.PI*2*(o/360),<br /> x = pusat[0] r*Math.sin(hudu),<br /> y = pusat[1] -r*Math.cos(hudu);<br /> kembalikan [x.toFixed(jingdu||0),y.toFixed(jingdu||0)]; <br /> }<br /> fungsi xx(a,b,lineNum){<br /> var t = 1000,<br /> stf = ((b*t-a*t)/lineNum)/t,<br /> arr = [1,2,2.5,5,10],<br /> c = 1,<br /> v;<br /> // 分割线的基数是 [1,2,2.5,5,10] 这个步骤是查找 间隔 属于哪个范围<br /> if(stf<arr[0]){<br /> manakala( stf<arr[0] ){<br /> c = c*10;<br /> arr[0]=arr[0]/c; <br /> }<br /> setiap ([1,2,2.5,5,10],fungsi(i,o){<br /> arr[i]= o/c;<br /> });<br /> }lain jika(stf>arr[4]){<br> manakala( stf>arr[4] ){<br> c = c*10;<br> arr[4] = arr[4]*c;<br> }<br> setiap ([1,2,2.5,5,10],fungsi(i,o){<br> arr[i]= o*c;<br> }); <br> }<br> <br> //上面找到间隔后 找到间隔中最接近的一个 <br> setiap(arr,fungsi(i,o){<br> jika(stf<=o){<br /> v = o;<br /> pulangkan palsu;<br /> }<br /> }); <br /> var bj = (mathAbs(a)*t)/(v*t),<br /> ba = 0,<br /> isZ = bj!==parseInt(bj);<br /> isZ<br /> &&a>0<br> ? ba = -a%v*t<br> : ba = (mathAbs(a)%v-v)*t; <br> <br> <br> a = (a*t ba)/t;<br> b = (b*t (b%v===0?0:(v-b%v))*t)/t;<br> <br> //看看还剩几条线没有画<br> var num = Math.max(0,lineNum - Math.round((b-a)/v));<br> jika(a>=0){<br> <br> //坐标比较整数化 <br> jika(a!=0&&num!=0&&a !==0){<br> manakala(a!=0&&num!=0){<br> a = (a*t-v*t)/t;<br> bilangan--;<br> if((a*t-v*num*t)/10000>0&&a ===0)<br> rehat;<br> }<br> }<br> <br> jika(bilangan!=0){<br> manakala(bilangan!==0){<br> b = (b*t v*t)/t<br> bilangan--; <br> }<br> } <br> <br> }lain{<br> //坐标比较整数化 <br> jika(b<0&&num!=0){<br /> manakala(b!=0&&num!=0&&b !==0){<br /> b = (b*t v*t)/t;<br /> bilangan--;<br /> if((b*t v*num*t)/t<0&&b ===0)<br /> pecah; <br /> }<br /> }<br /> jika(bilangan!=0){<br /> manakala(bilangan!==0){<br /> a = (a*t-v*t)/t<br /> bilangan--; <br /> }<br /> } <br /> }<br /> kembali {min:a,maks:b,stf:v};<br /> } <br />//------------------------------------------------ ------------------------------------------------- -------------<br /> //对svg vml元素的一些创建 修改属性 样式 删除 == 一些的操作<br /> win.vector = function(){};<br /> vektor.prototaip = {<br /> $c : fungsi(grafik,Nama nod){<br /> this.element = this[0] = doc.createElementNS('http://www.w3.org/2000/svg', nodeName); <br /> this.graphic = grafik;<br /> pulangkan ini;<br /> },<br /> attr: fungsi(cincang,val){<br /> var elem = this.element,<br /> kunci,<br /> nilai;<br /> if(jenis cincang === 'rentetan'){<br /> if(val === undefined){<br /> kembalikan elem.getAttribute(hash);<br /> }lain{<br /> elem.setAttribute(hash, val);<br /> pulangkan ini;<br /> }<br /> } lain {<br /> untuk(masukkan cincangan){<br /> nilai = hash[key];<br /> if(kunci === laluan){<br /> nilai && nilai.sertai<br /> &&(value = value.join(' '));<br /> /(NaN| |^$)/.test(value)<br /> &&(nilai = 'M 0 0');<br /> }<br /> elem.setAttribute(kunci, nilai) <br /> }<br /> }<br /> pulangkan ini;<br /> },<br /> css: fungsi(cincang){<br /> untuk(kunci var dalam cincang){<br /> isIE && key == "opacity"<br /> ? this[0].style['filter'] = "alpha(opacity=" hash[key] * 100 ")"<br /> : this[0].style[key] = hash[key];<br /> }<br /> pulangkan ini;<br /> },<br /> on: function(eventName, handler){<br /> var diri = ini;<br /> /*this.element.addEventListener(eventName,function(){<br /> pengendali.panggil(diri)<br /> },palsu);*/<br /> this.element['on' eventName] = fungsi(e){<br /> e = e || menang.acara;<br /> handler.call(self,e);<br /> } <br /> pulangkan ini;<br /> },<br /> appendTo: fungsi(ibu bapa){<br /> jika(ibu bapa){<br /> induk.elemen<br /> ? parent.element.appendChild(this.element)<br /> : parent.appendChild(elemen.ini)<br /> <br /> } lain {<br /> this.graphic.container.appendChild(this.element);<br /> }<br /> pulangkan ini;<br /> },<br /> addText: function(str){<br /> var elem = this.element;<br /> if(elem.nodeName === 'teks'){<br /> elem.appendChild(doc.createTextNode(str ''));<br /> }<br /> pulangkan ini;<br /> },<br /> setOpacity : function(v){<br /> this.attr('fill-opacity',v);<br /> pulangkan ini;<br /> },<br /> setSize : fungsi(v){<br /> ini[0].nodeName==='bulatan'<br /> ? this.attr('r',4 (v===0?0:2))<br /> : this.attr({'lebar lejang':v});<br /> pulangkan ini;<br /> },<br /> toFront: function() {<br /> this[0].parentNode.appendChild(this[0]);<br /> pulangkan ini;<br /> }, <br /> tunjukkan: fungsi(){<br /> ini[0].style.display = 'block';<br /> pulangkan ini;<br /> },<br /> sembunyikan: fungsi(){<br /> ini[0].style.display = 'tiada';<br /> pulangkan ini; <br /> },<br /> musnahkan : function(){<br /> //销毁节点......................<br /> nod var = ini[0] || ini;<br /> node.onmouseover = node.onmouseout = node.onclick = null;<br /> node.parentNode<br /> &&node.parentNode.removeChild(nod);<br /> pulangkan ini;<br /> }<br /> };<br />//------------------------------------------------ ------------------------------------------------- -------------<br /> //------------------------------------------------ ------------------------------------------------- -<br /> //Jika ia vml, ubah suai beberapa kaedah <br /> jika(!hasSVG){<br /> //--------------Buat persekitaran vml----------------- <br /> doc.createStyleSheet().addRule(".vml", "behavior: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 /> //-------------Ubah suai beberapa kaedah-----------------<br /> extend(vector.prototype,{<br /> $c : fungsi(grafik,Nama nod){<br /> var name = nodeName || 'bentuk'; This.element= this[0] = (nama === 'div' || nama === 'span')<br /> doc.createElement(nama)<br /> : doc.createElement('<vml:' name ' class="vml">'; <br> This.graphic = graphic;<br> Kembalikan ini; },<br> /*on : function(Nama acara, pengendali){<br> var diri = ini;<br> This.element.attachEvent("on" eventName,function(){<br> pengendali.call(self);<br> });<br> Kembalikan ini;<br> },*/<br> AddText: function(txt){<br> Ini[0].innerHTML = txt || Kembalikan ini;<br> },<br> setSize : fungsi(v){<br> Ini[0].strokeWeight = v;<br> Kembalikan ini;<br> }, <br> setOpacity : function(v){<br> This.opacity.opacity=v;<br> Kembalikan ini;<br> } <br> });<br> }<br> //------------------------------------------------ ------------------------------------------------- -<br> //Kelas lukisan <br> //------------------------------------------------ ------------<br> win.smipleChart = function(){<br> This.init.apply(this,arguments);<br> };<br> smileChart.list = [];<br> smileChart.timer = null;<br> smipleChart.lazyLoad = function(id){<br> id = id ||. '0' <br> smileChart.list[id]<br> &&smipleChart.list[id].loadMe();<br> };<br> smileChart.prototype = {<br> pilihan : {<br> Carta: {<br> paddingKanan: 20,<br> jejari : 200,<br> Gaya : {<br> fontFamily : '"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif',<br> Saiz fon : '12px',<br> latar belakang : '#FFFFFF'<br> }<br> },<br> tajuk: {<br> teks : '',<br> y : 10,<br> Gaya: {<br> fonKeluarga:'Verdana,Arial,Helvetica,sans-serif',<br> Saiz fon:'16px',<br> fonBerat:'bold'<br> }<br> },<br> subTajuk: {<br> teks : '',<br> y : 30,<br> Gaya : {<br> fonFamily:'Verdana,Arial,Helvetica,sans-serif',<br> Saiz fon:'12px', <br> Warna: '#111' <br> }<br> },<br> yUnit: {<br> teks : '',<br> Gaya: {<br> fonFamily:'Verdana,Arial,Helvetica,sans-serif',<br> Saiz fon:'12px', <br> Warna: '#111'<br> },<br> Nombor Baris:10<br> }<br> },<br> init : fungsi(bekas, pilihan){<br> clearTimeout(smipleChart.timer)<br> var diri = ini;<br>This.width = container.offsetWidth;<br> This.height = container.offsetHeight;<br> This.currList = {};<br> This.uuuid = uuuuid; This.timer = null;<br> //Borang koleksi kumpulan lukisan utama <br> //{id : {dom:xx,show:true}}<br> This.mainGroup = {};<br> // Digunakan semasa membahagikan untuk mengetahui mana yang tersembunyi kerana lukisan semula terlibat <br> This.hideList = {};<br> <br> //Apabila melukis gambar di dalam svg, mesti ada tag svg Untuk vml, div digunakan <br> This.container = hasSVG <br> ? vektor baharu().$c(1,'svg')<br> .attr({<br> xmlns : 'http://www.w3.org/2000/svg',<br> Versi: '1.1',<br> lebar: this.width,<br> Tinggi : this.height<br> <br> })<br> .css({fontSize : '12px'})<br> .appendTo(bekas)<br> : vektor baharu().$c(1,'div')<br> .css({<br> Saiz fon : '12px',<br> : 'px' lebar ini,<br> Ketinggian : this.height 'px'<br> })<br> .appendTo(bekas);<br> <br> This.loading = container.appendChild(doc.createElement('img'));<br> This.loading.setAttribute('src','http://images.cnblogs.com/cnblogs_com/wtcsy/192373/r_loading.gif');<br> This.loading.style.position = 'mutlak';<br> This.loading.style.top = container.offsetHeight/2- this.loading.offsetHeight/2 'px';<br> This.loading.style.left = container.offsetWidth/2- this.loading.offsetWidth/2 'px';<br> <br> var c = extend(true,{},this.options),<br> Opts = this.opts = extend(true,c,options),<br> Gaya = lanjutkan(opts.charts.style,{<br> Lebar : this.width,<br> Tinggi : this.height<br> });<br> <br> smipleChart.list[this.uuuid] = ini; <br> smipleChart.timer = setTimeout(function(){<br> smileChart.lazyLoad();<br> },200);<br> <br> },<br> loadMe : function(){<br> var opts = this.opts,<br> diri = ini,<br> Jenis = opts.charts.type;<br> This.container = this.container<br> .on('mouseout',function(e){<br> var elem = e.relatedTarget ||. e.toElement;<br> Jika(!mengandungi(ini[0],elemen)){<br> self.hideTooltip();<br> self.currList.dot<br> self.currList.line<br> &&self.currList.line.setSize(1.5);<br> Self.currList = {}; <br> }<br> })<br> .css({paparan:'tiada'})[0];<br> <br> //Kira beberapa parameter yang diperlukan semasa mengecat plat<br> This.getDrawArea()<br> .createTooltip() //Buat bingkai untuk mendapatkan maklumat segera<br> .drawTitle() //Lukis tajuk<br> <br> 'line,luas,pie'.indexOf(type)>=0<br> &&(opts.charts.panel = 'x');<br> <br> <br> ' pai, pai'.indexOf(type)<0<br /> &&this.drawPanel();<br /> <br /> <br /> this.drawLegend(opts.legend.type); //画色块条<br /> jenis var = {<br /> baris : 'drawLine',<br /> kawasan : 'drawArea',<br /> lajur : 'drawColumns',<br /> pai : 'drawPie',<br /> pai : 'drawPies',<br /> segmen : 'drawSegment'<br /> }[opts.charts.type];<br /> //开始画图..............<br /> ini[jenis]();<br /> <br /> //删除节点<br /> this.loading.parentNode.removeChild(this.loading);<br /> //断开引用<br /> this.loading = null;<br /> <br /> this.container.style.display = '';<br /> setTimeout(function(){<br /> smileChart.lazyLoad(( self.uuuid) '');<br /> },10)<br /> <br /> },<br /> createElement : function(nodeName){<br /> kembalikan vektor baharu().$c(this,nodeName);<br /> },<br /> kumpulan: fungsi(nama){<br /> kembalikan this.createElement(hasSVG?'g':'div').attr('mark',nama);<br /> },<br /> getDrawArea : function(){<br /> var opts = this.opts,<br /> lebar = ini.lebar,<br /> ketinggian = ini.tinggi,<br /> tajuk = opts.title,<br /> subTitle = opts.subTitle,<br /> kawasan = {<br /> // 去掉坐标轴左边的刻度文本宽度(预估) 80为定值 左边只留80的间距<br /> luas luas : lebar - 80, <br /> // 去掉坐标轴底下的文本和标线的高度<br /> luasKetinggian : tinggi - 40,<br /> //原点的X位置 下面会计算到<br /> startX : 0,<br /> //原点的Y位置 下面会计算到<br /> mulaY : 0,<br /> //中心的x坐标 画饼图的时候需要知道圆心的位置<br /> centerX: 0,<br /> //中心的y坐标 画饼图的时候需要知道圆心的位置<br /> pusatY: 0<br /> };<br /> //如果主标题存在 减去主标题的高度 否则 减去10的高<br /> area.areaHeight -=(title.text !== '')<br /> ? tajuk.y<br /> : 10;<br /> <br /> // 去掉副标题高度<br /> area.areaHeight -=(subTitle.text !== '')<br /> ? subTitle.y<br /> : 10<br /> <br /> area.startX = 80;<br /> area.startY = ketinggian - 40;<br /> <br /> //圆心的位置<br /> luas.centerX = lebar / 2;<br /> kawasan.centerY = ketinggian / 2; <br /> <br /> //右边留一些空隙<br /> area.areaWidth -=20;<br /> //上边也留一些间距<br /> area.areaHeight -=15;<br /> <br /> opts.luas = kawasan; <br /> <br /> pulangkan ini;<br /> },<br /> drawTitle : function(){ <br /> var opts = this.opts,<br /> diri = ini,<br /> arr = [opts.title,opts.subTitle,opts.yUnit],<br /> //3个标题坐标的位置的基本参数<br /> konfigurasi = [<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 /> tpanel = this.group('title')<br /> .appendTo();<br /> Setiap(arr,fungsi(i,tajuk){<br /> var text = title.text;<br /> Jika(teks){<br /> var elem = self.baseDraw.span(self,{<br /> 'text-anchor':'left',<br /> x: mathMax(config[i].x - calTextLen(text,title.style).w/2,10),<br /> y : konfigurasi[i].y<br /> },calTextLen(title.text,title.style).h)<br /> .css(tajuk.gaya)<br /> .addText(text)<br /> .appendTo(tpanel);<br /> <br /> //Jika 2, ini bermakna ia adalah sari kata Putar secara menegak <br /> Jika(i===2){<br /> mempunyaiSVG<br /> ? elem.attr({transform : 'putar(270, ' (opts.yUnit.x 10) ', ' self.height / 2 ')'})<br /> : (elem.element.style.filter ='progid:DXImageTransform.Microsoft.BasicImage(rotation=3)') <br /> }<br /> } <br /> }); <br /> Kembalikan ini;<br /> },<br /> //Melukis pinggan lebih menyusahkan<br /> drawPanel : fungsi(jenis){<br /> var opts = this.opts,<br /> diri = ini,<br /> Kawasan = opts.luas,<br /> ChartsType = opts.charts.type,<br /> isSegment = chartsType === 'segmen',<br /> //Jenis plat: plat mendatar atau plat menegak<br /> Jenis = opts.charts.panel || 'x';<br /> // Plat asas<br /> var drawAreaWidth = area.areaWidth,<br /> drawAreaHeight = area.areaHeight, <br /> //Koordinat asal<br /> StartX = area.startX,<br /> StartY = area.startY;<br /> var allData = [],<br /> minValue = 0,<br /> maxValue = 10,<br /> //Bilangan baris hanya boleh antara 1 dan 10<br /> lineNum = mathMin(10,mathMax(opts.yUnit.lineNum,1)),<br /> kakitangan;<br /> <br /> //Gabungkan semua data<br /> Setiap(opts.chartData,fungsi(i,o){<br /> // Jika ia ialah histogram, ia ialah jumlah semua data<br /> ialahSegmen<br /> ? setiap (o.data,fungsi(j,d){<br /> semuaData[j]<br /> ? allData[j] = allData[j] (~~d)<br /> : semuaData[j] = ~~d;<br /> })<br /> : allData = allData.concat(o.data)<br /> });<br /> <br /> // Isih semua data untuk mencari nilai maksimum dan minimum di bawah <br /> AllData.sort(function(a,b){return a-b});<br /> <br /> //Cari nilai maksimum dan nilai minimum<br /> maxValue = allData[allData.length - 1];<br /> <br /> Setiap(semuaData,fungsi(i,o){<br /> Jika(o!==null){<br /> minValue = o;<br /> Kembalikan palsu;<br /> } <br /> }); <br /> <br /> //Bekas plat utama<br /> var panel = this.group('panel').appendTo();<br /> <br /> var result = xx(minValue,maxValue,lineNum),<br /> Min = result.min,<br /> maks = hasil.maks,<br /> f = hasil.stf;<br /> ialahSegmen<br /> &&(min = 0); //Menunjukkan bahawa lukisan itu adalah abscissa atau koordinat berganda<br /> If(type.toLowerCase()==='x'){<br /> //Selang unit Abscissa<br /> var xPices = drawAreaWidth / opts.xUnit.units.length,<br />//Titik tengah selang unit<br /> Offset = xPices / 2,<br /> <br /> yPices = drawAreaHeight / lineNum;<br /> <br /> //--------------------------------Lukis titik dan teks mendatar----------- - -------------------------------------------------<br /> var y = hasSVG?5:10,<br /> t = 1000,<br /> rentang; <br /> Setiap (opts.xUnit.units,function(i,d){ Self.baseDraw.path(self,{<br /> Sempadan : 1,<br /> Warna Sempadan: '#C0C0C0',<br /> isfill : palsu,<br /> Laluan : [<br /> M, <br /> processPoint(startX (i * xPices)), <br /> processPoint(startY), <br /> L,<br /> processPoint(startX (i*xPices)),<br /> ProcessPoint(startY 5)<br /> ]<br /> }).<br /> tambahkepada(panel);<br /> <br /> span = self.baseDraw.span(self,{<br /> x: startX offset (i * xPices),<br /> y : mulaY y,<br /> 'text-anchor': 'middle'<br /> })<br /> .css({<br /> fontFamily : 'Verdana,Arial,Helvetica,sans-serif',<br /> Saiz fon : '12px'<br /> })<br /> .addText(opts.xUnit.units[i])<br /> .appendTo(panel)[0];<br /> <br /> !hasSVG<br /> &&(span.style.left = parseInt(span.style.left) - span.offsetWidth/2 'px');<br /> <br /> });<br /> //--------------------------------Lukis titik dan teks menegak ----------- - ------------------------------------------------- - ---------- <br /> untuk(i=0;i<=lineNum;i ){<br /> Self.baseDraw.path(self,{<br /> Sempadan : 1,<br /> Warna Sempadan: '#C0C0C0',<br /> isfill : palsu,<br /> laluan : [M, startX, processPoint(startY - (i * yPices)), L, processPoint(startX drawAreaWidth), processPoint(startY - (i *yPices))]<br /> })<br /> .css({zIndex:-10}) <br /> .appendTo(panel);<br /> <br /> var span = self.baseDraw.span(self,{<br /> x : mulaX - 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 /> 'saiz fon' : '12px',<br /> Lebar : '40px',<br /> paparan : 'sekat',<br /> textAlign : 'kanan'<br /> })<br /> .addText((min*t (i*t*f/t)*t)/t '')<br /> .appendTo(panel)[0];<br /> Jika(!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 /> }lain{<br /> //Selang unit Abscissa<br /> var yPices = drawAreaHeight / (opts.xUnit.units.length),<br /> //Titik tengah selang unit<br /> Offset = Math.round(yPices / 2),<br /> x = mempunyaiSVG 25 : 70,<br /> y=hasSVG 0 : 5,<br /> rentang<br /> <br /> Setiap (opts.xUnit.units,function(i,d){ Self.baseDraw.path(self,{<br /> Sempadan : 1,<br /> Warna Sempadan: '#C0C0C0',<br /> isfill : palsu,<br /> Laluan : [<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(panel);<br /> span = self.baseDraw.span(self,{<br /> x: mulaX - x,<br /> : mulaY -i * yPices-offset-calTextLen(d).h/2 y,<br /> 'text-anchor': 'middle'<br /> })<br /> .css({<br /> fonFamily:'Verdana,Arial,Helvetica,sans-serif',<br /> Saiz fon:'12px',<br /> lebar : '60px',<br /> teksJajarkan:'kanan'<br /> })<br /> .addText(d)<br /> .appendTo(panel) <br /> <br /> });<br /> <br /> <br /> var xPices = drawAreaWidth / lineNum;<br /> <br /> untuk(var i=0;i<=lineNum;i ){<br /> Self.baseDraw.path(self,{<br /> Sempadan : 1,<br /> Warna Sempadan: '#C0C0C0',<br /> isfill : palsu,<br /> Laluan : [<br /> M, <br /> processPoint(startX (i * xPices)), <br /> processPoint(startY), <br /> L, <br /> processPoint(startX (i*xPices)),<br /> processPoint(startY - drawAreaHeight)<br /> ]<br /> }).<br /> tambahkepada(panel);<br /> <br /> Self.baseDraw.span(self,{<br /> x: startX - calTextLen(min i*f '').w/2 i * xPices,<br /> y : mulaY,<br /> 'text-anchor':'left'<br /> })<br /> .css({<br /> fonFamily:'Verdana,Arial,Helvetica,sans-serif',<br /> Saiz fon:'12px'<br /> })<br /> .addText(min i*f '')<br /> .appendTo(panel); <br /> }<br /> <br /> }<br /> //------------------------------------------------ ------------------------------------------------- --- <br /> //Oleh kerana titik permulaan mungkin tidak bermula dari 0, nilai sehingga 0 mesti ditambah pada titik permulaan <br /> var jianju =0;<br /> Jika(min>0)jianju = min;<br>Jika(maks<0)jianju = maks;<br /> <br /> StartX = opts.charts.panel==='x' ? startX :startX-xPices*(min/f);<br /> StartY = opts.charts.panel==='x' ? mulaY yPices*(min/f) : startY; Opts.draw = {<br /> StartX : startX, // titik permulaan paksi-X<br /> StartY : startY, // titik permulaan paksi-Y<br /> xPices : xPices, // Lebar setiap bahagian paksi X<br /> yPices : yPices, // Lebar setiap bahagian paksi Y<br /> Offset : offset, // X kedudukan titik tengah titik tunggal offset <br /> jianjuY : jianju*yPices/f,<br /> jianjuX : jianju*xPices/f, <br /> Suapan : f // Berapakah bilangan salinan pada paksi Y <br /> }<br /> Kembalikan ini;<br /> },<br /> createTooltip: function(){<br /> //Sekumpulan<br /> This.tipC = this.group('tip')<br /> .css({zIndex: 200, tinggi:'20px',lebar:'20px',kedudukan:'mutlak'})<br /> .appendTo()<br /> .sembunyi()<br /> //Lukis bingkai asasLukis <br /> This.tipBox = this.baseDraw.rect(this,{arc:0.22,fill:'#fff',border:2,borderColor:'#606060'})<br /> .appendTo(this.tipC)<br /> <br /> //Oleh kerana g dalam svg boleh diletakkan secara langsung, tetapi rendering kumpulan dalam vml sangat perlahan, jadi saya menukar div, jadi induk di sini berbeza<br /> var p = isIE ?this.tipBox :this.tipC;<br /> <br /> This.tipTxtContainer = this.baseDraw.text(this,{fill:'#000000',x:5,y:19,'text-anchor':'left'})<br /> .css({<br /> fonFamily:'Verdana,Arial,Helvetica,sans-serif',<br /> Saiz fon:'12px',<br /> latar belakang: '#FFF'<br /> })<br /> .appendTo(p);<br /> <br /> This.tipText = doc.createTextNode('');<br /> This.tipTxtContainer[0].appendChild(this.tipText);<br /> Kembalikan ini;<br /> },<br /> showTooltip: fungsi(obj, x, y,data){<br /> <br /> /*var txt = obj.name ':' data,<br /> saiz = calTextLen(txt,this.tipTxtContainer[0].style.cssText),<br /> pos = {x : x - (saiz.w 5 * 2)/2 ,y : y - 32};<br /> This.tipC<br /> .toFront()<br /> .show();<br /> jika(mempunyaiSVG){<br /> This.tipC.attr({transform:'translate(' pos.x ',' pos.y ')'});<br /> <br /> This.tipBox<br /> .attr({lebar : saiz.w 5 * 2,tinggi : saiz.h 5 * 2,lejang : obj.color||'#606060'});<br /> }lain{<br /> This.tipC.css({left:pos.x,top:pos.y});<br /> <br /> This.tipBox<br /> .css({lebar:saiz.w 5 * 2,tinggi : saiz.h 5 * 2})<br /> This.tipBox[0].strokeColor = obj.color||'#000'; }<br /> This.tipText.nodeValue = txt || ClearTimeout(this.timer);<br /> var txt = obj.name ':' data,<br /> diri = ini,<br /> saiz = calTextLen(txt,this.tipTxtContainer[0].style.cssText),<br /> pos = {x : x - (saiz.w 5 * 2)/2 ,y : y - 32};<br /> jika(mempunyaiSVG){ <br /> self.tipBox<br /> .attr({lebar : saiz.w 5 * 2,tinggi : saiz.h 5 * 2,lejang : obj.color||'#606060'});<br /> }lain{ self.tipBox<br /> .css({lebar:saiz.w 5 * 2,tinggi : saiz.h 5 * 2})<br /> Self.tipBox[0].strokeColor = obj.color||'#000'; <br /> }<br /> This.tipText.nodeValue = txt || <br /> if(this.tipC[0].style.display === 'tiada'){<br /> HasSVG<br /> ? self.tipC.attr({transform:'translate(' pos.x ',' pos.y ')',pos:pos.x '-' pos.y})<br /> : self.tipC.attr({pos:pos.x '-' pos.y}).css({kiri:pos.x,atas:pos.y});<br /> ini.tipC<br /> .toFront()<br /> .show();<br /> <br /> }lain{<br /> var move = function(t,b,c,d){<br /> kembalikan c*(t/=d)*t b;<br /> },<br /> t = 0,<br /> b = self.tipC.attr('pos').split('-'),<br /> c = [pos.x,pos.y],<br /> d = 5;<br /> <br /> this.timer = setInterval(function(){<br /> jika(t<d){<br /> t ;<br /> <br /> var x = bergerak(t,~~b[0],(~~c[0])-(~~b[0]),d),<br /> y = bergerak(t,~~b[1],(~~c[1])-(~~b[1]),d);<br /> mempunyaiSVG<br /> ? self.tipC.attr({transform:'translate(' x ',' y ')',pos:x '-' y})<br /> : self.tipC.attr({pos:x '-' y}).css({kiri:x,atas:y});<br /> }lain{<br /> clearTimeout(self.timer);<br /> }<br /> },1);<br /> }; <br /> },<br /> hideTooltip: function(){<br /> this.tipC.hide();<br /> }, <br /> drawLegend : function(type,redraw){<br /> var self = ini,<br /> opts = this.opts,<br /> isLine = opts.charts.type === 'line', <br /> //颜色块的大小<br /> t_width = 20,<br /> t_tinggi = 20,<br /> //块之间的距离<br /> t_space = 5, <br /> datas = opts.chartData,<br /> len = datas.length,<br /> css = opts.legend.style,<br /> //最大长度 如果是纵着的 需要最大的长度<br /> maxWidth = 10,<br /> maxHeight= 30,<br /> //这个东西的位置<br /> orig_pos = opts.legend.pos?opts.legend.pos:[2,2],<br /> <br /> //显示隐藏组的函数<br /> pemegang = fungsi(i){<br /> var g = self.mainGroup['carta' i],<br /> issegment = opts.charts.type==='segmen';<br /> <br /> if(g.show){<br /> g.chart.hide();<br /> g.show = palsu;<br /> mempunyaiSVG<br /> ? this.attr({isi:'#ccc'})<br /> : this[0].style.color = '#ccc';<br /> <br /> <br /> //如果是分段图 是会涉及到重画的<br /> jika(issegment){<br /> self.hideList[i] ='';<br /> var mainGroup = self.mainGroup;<br /> <br /> for(nama var dalam MainGroup){ <br /> var parent = mainGroup[name].carta,<br /> nod = induk[0].childNodes,<br /> len = nod.length;<br /> //销毁图上面画的东西<br /> untuk(var i = len-1;i>=0;i--){<br> vector.prototype.destroy.call(nod[i])<br> } <br> }<br> //重画 <br> self.drawSegment();<br> } <br> <br> }lain{<br> g.chart.show();<br> g.show = benar;<br> mempunyaiSVG<br> ? this.attr({isi:'#000'})<br> : ini[0].style.color = '#000'<br> <br> jika(issegment){<br> padamkan self.hideList[i];<br> var mainGroup = self.mainGroup;<br> <br> for(nama var dalam MainGroup){<br> <br> var parent = mainGroup[name].carta,<br> nod = induk[0].childNodes,<br> len = nod.length;<br> untuk(var i = len-1;i>=0;i--){<br> vector.prototype.destroy.call(nod[i])<br> } <br> <br> }<br> self.drawSegment();<br> } <br> }<br> },<br> <br> arr = [];<br> jenis = jenis ||'sisi'; <br> var legendPanel = self.group('Legend')<br> .appendTo();<br> if(type==='lateral'){<br> //如果是横着的<br> var atas = orig_pos[1] 5,<br> ke = mempunyaiSVG?0:3,<br> kiri = orig_pos[0] 5; <br> setiap satu(data, fungsi(i,d){ <br> kiri = i ===0 ? kiri : t_space left;<br> //计算所有 left的位置<br> //如果是线性图 按线性图的方式画图<br> if(isLine){<br> self.baseDraw.path(self,{<br> sempadan : 1.5,<br> Warna sempadan : d.warna,<br> isfill : palsu,<br> laluan : [<br> M,<br> left.toFixed(0),<br> (10 teratas).kepadaTetap(0),<br> L,<br> (kiri 25).kepadaTetap(0),<br> (10 teratas).kepadaTetap(0)<br> ]<br> })<br> .appendTo(legendPanel);<br> self.baseDraw[d.dotType || 'bulatan'](diri sendiri,{<br> x : kiri 12, <br> y : 10 teratas,<br> r : 4,<br> isiWarna : d.warna<br> })<br> .appendTo(legendPanel);<br> }lain{<br> self.baseDraw.rect(self,{<br> arka : 0.1,<br> isi : d.warna,<br> sempadan : 1,<br> Warna sempadan : d.warna,<br> kiri : kiri,<br> atas : atas,<br> lebar : t_width 'px',<br> ketinggian : t_tinggi 'px' <br> })<br> .appendTo(legendPanel)<br> }<br> <br> kiri = kiri t_lebar 2 t_space;<br> var w = calTextLen(d.name,css).w<br> self.baseDraw.span(self,{<br> 'text-anchor':'left',<br> x : kiri,<br> y : ke atas<br> })<br> .css(lanjutkan(css,{kursor:'penunjuk'}))<br> .on('klik',function(){<br> handle.call(this,i);<br> })<br> .addText(d.name)<br> .appendTo(legendPanel);<br> kiri = kiri w;<br> });<br> this.baseDraw.rect(this,{<br> arka : 0.1,<br> isi : 'tiada',<br> sempadan : 1.5,<br> Warna sempadan : '#666666',<br> lebar : t_space kiri- orig_pos[0],<br> ketinggian : maxKetinggian,<br> kiri : orig_pos[0],<br> atas : orig_pos[1]<br> })<br> .appendTo(legendPanel);<br> }lain{<br> var atas = orig_pos[1] 5,<br> ke = mempunyaiSVG?0:3,<br> kiri = orig_pos[0] 5;<br> setiap (data, fungsi(i,d){<br> atas = i ===0 ? atas : t_space atas;<br> self.baseDraw.rect(self,{<br> arka : 0.1,<br> isi : d.warna,<br> sempadan : 1,<br> Warna sempadan : d.warna,<br> kiri : kiri,<br> atas : atas,<br> lebar : t_width 'px',<br> ketinggian : t_tinggi 'px' <br> })<br> .appendTo(legendPanel);<br> var h = calTextLen(d.name,css).h;<br> <br> self.baseDraw.span(self,{<br> 'text-anchor':'left',<br> x : t_width kiri 2 t_space,<br> y : ke atas<br> })<br> .css(lanjutkan(css,{kursor:'penunjuk'}))<br> .addText(d.name)<br> .on('klik',function(){<br> //如果是多层饼图 不行进隐藏 <br> if(opts.charts.type==='pies')return;<br> handle.call(ini,i); <br> })<br> .appendTo(legendPanel); <br> atas = atas h t_space;<br> maxWidth = Math.max(maxWidth,calTextLen(d.name,css).w);<br> }); <br> this.baseDraw.rect(this,{<br> &</div>