接触jquery有段时间了,终于照着写了我的第一个jquery插件,用来生成fusinocharts的html代码,我注意到用fusincharts提供的函数生成chart空白边距太大,最明显的在标题和图形之间空得太多,但我不能控制它。于是我将flash生成在一个div内,且将它设置置于底层,固定好div高宽,让内层的flash放大,这样就得到我想要的大小又没有多于的空白边距了。
(function($) { $.fn.FusionChart = function(options) { var opts = $.extend({}, $.fn.FusionChart.defaults, options); var width=opts.width; var height=opts.height; var zoom=opts.zoom; var src=opts.src; var data=opts.data; var title=opts.title; var bgcolor=opts.bgcolor; var titH=Math.floor(height*0.3); if(!title)titH=0; return this.each(function() { $this = $(this); var tit=$('<div></div>'); tit.text(title); var swf=$('<div></div>'); var swfWidth=Math.floor(width*zoom); var swfHeight=Math.floor(height*zoom); swf.html(swfHTML(swfWidth,swfHeight,src,data)); var marginTop=-1*Math.floor((height-titH)*(zoom-1)/2); var marginLeft=-1*Math.floor(width*(zoom-1)/2); var con=$('<div></div>'); con.append(swf).append(tit); con.css({width:width,height:height,'text-align':'center','margin-right':'auto','margin-left':'auto',overflow:'hidden'}); con.css({position:'relative'}); swf.css({width:swfWidth,height:swfHeight,'margin-top':marginTop,'margin-left':marginLeft}); swf.css({position:'absolute',top:0,left:0}); $this.empty().append(con); tit.css({'text-align':'center','margin-right':'auto','margin-left':'auto',overflow:'hidden','font-size':'13px'}); tit.css({position:'absolute',top:5,left:0,width:'100%'}); }); function swfHTML(width,height,src,dataXML,bgcolor){ var swfNode='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+ width +'" height="'+ height +'">"'; swfNode += '<param name="movie" value="'+ src+'?chartWidth='+width+'&chartHeight='+height+'" />'; swfNode += '<param name="quality" value="high" />'; swfNode += '<param name="wmode" value="Opaque" />'; swfNode += '<param name="bgcolor" value="'+bgcolor+'" />'; swfNode += '<param name="FlashVars" value="&dataXML='+dataXML+'" />'; swfNode += '<embed src="'+src+'?chartWidth='+width+'&chartHeight='+height+'" '; swfNode += 'flashVars="&dataXML='+dataXML+'" '; swfNode += 'quality="high" width="'+width+'" height="'+height+'" wmode="Opaque" bgcolor="'+bgcolor+'"'; swfNode += 'type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />'; swfNode += '</object>'; return swfNode; } } $.fn.FusionChart.defaults = { width:250, height:200, src:'', data:'', title:'', zoom:1, bgcolor:'#FFFFFF' } })(jQuery);