`
cgs1999
  • 浏览: 536428 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

[分享]VML实现的饼图

 
阅读更多

以前收集的VML实现的饼图vml_pie.html,感谢提供该代码的前辈,现将代码分享,代码如下:

  1. <htmlxmlns:v="urn:schemas-microsoft-com:vml"xmlns:o="urn:schemas-microsoft-com:office:office">
  2. <head>
  3. <title></title>
  4. <metaname="GENERATOR"content="MicrosoftVisualStudio.NET7.1">
  5. <metaname="ProgId"content="VisualStudio.HTML">
  6. <metaname="Originator"content="MicrosoftVisualStudio.NET7.1">
  7. <STYLE>v/:*{BEHAVIOR:url(#default#VML)}
  8. o/:*{BEHAVIOR:url(#default#VML)}
  9. .shape{BEHAVIOR:url(#default#VML)}
  10. </STYLE>
  11. <scriptlanguage="javascript">
  12. functionAdd(){
  13. varshape=document.createElement("v:shape");
  14. shape.type="#tooltipshape";
  15. shape.style.width="150px";
  16. shape.style.height="150px";
  17. shape.coordsize="21600,21600";
  18. shape.fillcolor="infobackground";
  19. vartextbox=document.createElement("v:textbox");
  20. textbox.style.border="1pxsolidred";
  21. textbox.style.innerHTML="测试";
  22. shape.appendChild(textbox);
  23. document.body.appendChild(shape);
  24. }
  25. functionVMLPie(pContainer,pWidth,pHeight,pCaption){
  26. this.Container=pContainer;
  27. this.Width=pWidth||"400px";
  28. this.Height=pHeight||"250px";
  29. this.Caption=pCaption||"VMLChart";
  30. this.backgroundColor="";
  31. this.Shadow=false;
  32. this.BorderWidth=0;
  33. this.BorderColor=null;
  34. this.all=newArray();
  35. this.RandColor=function(){
  36. return"rgb("+parseInt(Math.random()*255)+","+parseInt(Math.random()*255)+","+parseInt(Math.random()*255)+")";
  37. }
  38. this.VMLObject=null;
  39. }
  40. VMLPie.prototype.Draw=function(){
  41. //画外框
  42. varo=document.createElement("v:group");
  43. o.style.width=this.Width;
  44. o.style.height=this.Height;
  45. o.coordsize="21600,21600";
  46. //添加一个背景层
  47. varvRect=document.createElement("v:rect");
  48. vRect.style.width="21600px"
  49. vRect.style.height="21600px"
  50. o.appendChild(vRect);
  51. varvCaption=document.createElement("v:textbox");
  52. vCaption.style.fontSize="24px";
  53. vCaption.style.height="24px"
  54. vCaption.style.fontWeight="bold";
  55. vCaption.innerHTML=this.Caption;
  56. vCaption.style.textAlign="center";
  57. vRect.appendChild(vCaption);
  58. //设置边框大小
  59. if(this.BorderWidth){
  60. vRect.strokeweight=this.BorderWidth;
  61. }
  62. //设置边框颜色
  63. if(this.BorderColor){
  64. vRect.strokecolor=this.BorderColor;
  65. }
  66. //设置背景颜色
  67. if(this.backgroundColor){
  68. vRect.fillcolor=this.backgroundColor;
  69. }
  70. //设置是否出现阴影
  71. if(this.Shadow){
  72. varvShadow=document.createElement("v:shadow");
  73. vShadow.on="t";
  74. vShadow.type="single";
  75. vShadow.color="graytext";
  76. vShadow.offset="4px,4px";
  77. vRect.appendChild(vShadow);
  78. }
  79. this.VMLObject=o;
  80. this.Container.appendChild(o);
  81. //开始画内部园
  82. varoOval=document.createElement("v:oval");
  83. oOval.style.width="15000px";
  84. oOval.style.height="14000px";
  85. oOval.style.top="4000px";
  86. oOval.style.left="1000px";
  87. oOval.fillcolor="#d5dbfb";
  88. //本来计划加入3D的效果,后来感觉确实不好控制,就懒得动手了
  89. //varo3D=document.createElement("o:extrusion");
  90. varformatStyle='<v:fillrotate="t"angle="-135"focus="100%"type="gradient"/>';
  91. //formatStyle+='<o:extrusionv:ext="view"color="#9cf"on="t"rotationangle="-15"';
  92. //formatStyle+='viewpoint="0,34.72222mm"viewpointorigin="0,.5"skewangle="105"';
  93. //formatStyle+='lightposition="0,50000"lightposition2="0,-50000"/>';
  94. formatStyle+='<o:extrusionv:ext="view"backdepth="1in"on="t"viewpoint="0,34.72222mm"viewpointorigin="0,.5"skewangle="90"lightposition="-50000"lightposition2="50000"type="perspective"/>';
  95. oOval.innerHTML=formatStyle;
  96. o.appendChild(oOval);
  97. this.CreatePie(o);
  98. }
  99. VMLPie.prototype.CreatePie=function(vGroup){
  100. varmX=Math.pow(2,16)*360;
  101. //这个参数是划图形的关键
  102. //AExywidthheightstartangleendangle
  103. //xy表示圆心位置
  104. //widthheight形状的大小
  105. //startangleendangle的计算方法如下
  106. //2^16*度数
  107. varvTotal=0;
  108. varstartAngle=0;
  109. varendAngle=0;
  110. varpieAngle=0;
  111. varprePieAngle=0;
  112. varobjRow=null;
  113. varobjCell=null;
  114. for(i=0;i<this.all.length;i++){
  115. vTotal+=this.all[i].Value;
  116. }
  117. varobjLegendRect=document.createElement("v:rect");
  118. varobjLegendTable=document.createElement("table");
  119. objLegendTable.cellPadding=0;
  120. objLegendTable.cellSpacing=3;
  121. objLegendTable.width="100%";
  122. with(objLegendRect){
  123. style.left="17000px";
  124. style.top="4000px";
  125. style.width="4000px";
  126. style.height="12000px";
  127. fillcolor="#e6e6e6";
  128. strokeweight="1px";
  129. }
  130. objRow=objLegendTable.insertRow();
  131. objCell=objRow.insertCell();
  132. objCell.colSpan="2";
  133. //objCell.style.border="1pxoutset";
  134. objCell.style.backgroundColor="black";
  135. objCell.style.padding="5px";
  136. objCell.style.color="window";
  137. objCell.style.font="caption";
  138. objCell.innerText="总数:"+vTotal;
  139. varvTextbox=document.createElement("v:textbox");
  140. vTextbox.appendChild(objLegendTable);
  141. objLegendRect.appendChild(vTextbox);
  142. varvShadow=document.createElement("v:shadow");
  143. vShadow.on="t";
  144. vShadow.type="single";
  145. vShadow.color="graytext";
  146. vShadow.offset="2px,2px";
  147. objLegendRect.appendChild(vShadow);
  148. vGroup.appendChild(objLegendRect);
  149. varstrAngle="";
  150. for(i=0;i<this.all.length;i++){//顺序的划出各个饼图
  151. varvPieEl=document.createElement("v:shape");
  152. varvPieId=document.uniqueID;
  153. vPieEl.style.width="15000px";
  154. vPieEl.style.height="14000px";
  155. vPieEl.style.top="4000px";
  156. vPieEl.style.left="1000px";
  157. vPieEl.coordsize="1500,1400";
  158. vPieEl.strokecolor="white";
  159. vPieEl.id=vPieId;
  160. pieAngle=this.all[i].Value/vTotal;
  161. startAngle+=prePieAngle;
  162. prePieAngle=pieAngle;
  163. endAngle=pieAngle;
  164. //strAngle+=this.all[i].Name+":"+this.all[i].Value+"Start:"+startAngle+"End:"+endAngle+"/n";
  165. vPieEl.path="M750700AE750700750700"+parseInt(mX*startAngle)+""+parseInt(mX*endAngle)+"xe";
  166. vPieEl.title=this.all[i].Name+"/n所占比例:"+endAngle*100+"%/n详细描述:"+this.all[i].TooltipText;
  167. //vPieEl.innerHTML='<v:fillrotate="t"angle="-135"focus="100%"type="gradient"/>';
  168. varobjFill=document.createElement("v:fill");
  169. objFill.rotate="t";
  170. objFill.focus="100%";
  171. objFill.type="gradient";
  172. objFill.angle=parseInt(360*(startAngle+endAngle/2));
  173. vPieEl.appendChild(objFill);
  174. varobjTextbox=document.createElement("v:textbox");
  175. objTextbox.border="1pxsolidblack";
  176. objTextbox.innerHTML=this.all[i].Name+":"+this.all[i].Value;
  177. //vPieEl.appendChild(objTextbox);
  178. varvColor=this.RandColor();
  179. vPieEl.fillcolor=vColor;//设置颜色
  180. //开始画图例
  181. objRow=objLegendTable.insertRow();
  182. objRow.style.height="16px";
  183. varobjColor=objRow.insertCell();//颜色标记
  184. objColor.style.backgroundColor=vColor;
  185. objColor.style.width="16px";
  186. objColor.PieElement=vPieId;
  187. objColor.attachEvent("onmouseover",LegendMouseOverEvent);
  188. objColor.attachEvent("onmouseout",LegendMouseOutEvent);
  189. //objColor.onmouseover="LegendMouseOverEvent()";
  190. //objColor.onmouseout="LegendMouseOutEvent()";
  191. objCell=objRow.insertCell();
  192. objCell.style.font="icon";
  193. objCell.style.padding="3px";
  194. objCell.innerText=this.all[i].Name+":"+this.all[i].Value;
  195. vGroup.appendChild(vPieEl);
  196. }
  197. }
  198. VMLPie.prototype.Refresh=function(){
  199. }
  200. VMLPie.prototype.Zoom=function(iValue){
  201. varvX=21600;
  202. varvY=21600;
  203. this.VMLObject.coordsize=parseInt(vX/iValue)+","+parseInt(vY/iValue);
  204. }
  205. VMLPie.prototype.AddData=function(sName,sValue,sTooltipText){
  206. varoData=newObject();
  207. oData.Name=sName;
  208. oData.Value=sValue;
  209. oData.TooltipText=sTooltipText;
  210. variCount=this.all.length;
  211. this.all[iCount]=oData;
  212. }
  213. VMLPie.prototype.Clear=function(){
  214. this.all.length=0;
  215. }
  216. functionLegendMouseOverEvent(){
  217. vareSrc=window.event.srcElement;
  218. eSrc.border="1pxsolidblack";
  219. }
  220. functionLegendMouseOutEvent(){
  221. vareSrc=window.event.srcElement;
  222. eSrc.border="";
  223. }
  224. varobjPie=null;
  225. //以下是函数调用
  226. functionDrawPie(){
  227. objPie=newVMLPie(document.body,"600px","450px","人口统计图");
  228. //objPie.BorderWidth=3;
  229. //objPie.BorderColor="blue";
  230. //objPie.Width="800px";
  231. //objPie.Height="600px";
  232. objPie.backgroundColor="#ffffff";
  233. objPie.Shadow=true;
  234. objPie.AddData("北京",10,"北京的人口");
  235. objPie.AddData("上海",52,"上海的固定人口");
  236. objPie.AddData("天津",30,"天津的外地人口");
  237. objPie.AddData("西安",58,"西安城市人口");
  238. objPie.AddData("武汉",30,"武汉的外地人口");
  239. objPie.AddData("重庆",58,"重庆城市人口");
  240. objPie.Draw();
  241. //alert(document.body.outerHTML);
  242. }
  243. </script>
  244. </head>
  245. <bodyonload="DrawPie()">
  246. <v:shapetypeid="tooltipshape"coordsize="21600,21600"o:spt="106"path="ar0,7165,4345,13110,1950,7185,1080,12690at475,11732,4835,17650,1080,12690,2910,17640at2387,9757,10107,20300,2910,17640,8235,19545at7660,12382,14412,21597,8235,19545,14280,18330at12910,11080,18695,18947,14280,18330,18690,15045at14822,5862,21597,15082,18690,15045,20895,7665at15772,2592,21105,9865,20895,7665,19140,2715at14330,0,19187,6595,19140,2715,14910,1170at10992,0,15357,5945,14910,1170,11250,1665at6692,650,12025,7917,11250,1665,7005,2580at1912,1972,8665,11162,7005,2580,1950,7185xear0,7165,4345,13110,1080,12690,2340,13080nfear475,11732,4835,17650,2910,17640,3465,17445nfear7660,12382,14412,21597,7905,18675,8235,19545nfear7660,12382,14412,21597,14280,18330,14400,17370nfear12910,11080,18695,18947,18690,15045,17070,11475nfear15772,2592,21105,9865,20175,9015,20895,7665nfear14330,0,19187,6595,19200,3345,19140,2715nfear14330,0,19187,6595,14910,1170,14550,1980nfear10992,0,15357,5945,11250,1665,11040,2340nfear1912,1972,8665,11162,7650,3270,7005,2580nfear1912,1972,8665,11162,1950,7185,2070,7890nfem@23@37qx@35@24@23@36@34@24@23@37xem@16@33qx@31@17@16@32@30@17@16@33xem@38@29qx@27@39@38@28@26@39@38@29xe"
  247. adj="1350,25920">
  248. <v:formulas>
  249. <v:feqn="sum#0010800"></v:f>
  250. <v:feqn="sum#1010800"></v:f>
  251. <v:feqn="cosatan210800@0@1"></v:f>
  252. <v:feqn="sinatan210800@0@1"></v:f>
  253. <v:feqn="sum@2108000"></v:f>
  254. <v:feqn="sum@3108000"></v:f>
  255. <v:feqn="sum@40#0"></v:f>
  256. <v:feqn="sum@50#1"></v:f>
  257. <v:feqn="mod@6@70"></v:f>
  258. <v:feqn="prod600111"></v:f>
  259. <v:feqn="sum@80@9"></v:f>
  260. <v:feqn="prod@1013"></v:f>
  261. <v:feqn="prod60031"></v:f>
  262. <v:feqn="sum@11@120"></v:f>
  263. <v:feqn="prod@13@6@8"></v:f>
  264. <v:feqn="prod@13@7@8"></v:f>
  265. <v:feqn="sum@14#00"></v:f>
  266. <v:feqn="sum@15#10"></v:f>
  267. <v:feqn="prod60081"></v:f>
  268. <v:feqn="prod@1121"></v:f>
  269. <v:feqn="sum@18@190"></v:f>
  270. <v:feqn="prod@20@6@8"></v:f>
  271. <v:feqn="prod@20@7@8"></v:f>
  272. <v:feqn="sum@21#00"></v:f>
  273. <v:feqn="sum@22#10"></v:f>
  274. <v:feqn="prod60021"></v:f>
  275. <v:feqn="sum#06000"></v:f>
  276. <v:feqn="sum#00600"></v:f>
  277. <v:feqn="sum#16000"></v:f>
  278. <v:feqn="sum#10600"></v:f>
  279. <v:feqn="sum@16@250"></v:f>
  280. <v:feqn="sum@160@25"></v:f>
  281. <v:feqn="sum@17@250"></v:f>
  282. <v:feqn="sum@170@25"></v:f>
  283. <v:feqn="sum@23@120"></v:f>
  284. <v:feqn="sum@230@12"></v:f>
  285. <v:feqn="sum@24@120"></v:f>
  286. <v:feqn="sum@240@12"></v:f>
  287. <v:feqn="sum#000"></v:f>
  288. <v:feqn="sum#100"></v:f>
  289. </v:formulas>
  290. <v:patho:connectlocs="67,10800;10800,21577;21582,10800;10800,1235;@38,@39"o:extrusionok="f"
  291. o:connecttype="custom"textboxrect="2977,3262,17087,17337"></v:path>
  292. <v:handles>
  293. <v:hposition="#0,#1"></v:h>
  294. </v:handles>
  295. <o:complexv:ext="view"></o:complex>
  296. </v:shapetype>
  297. <selectid="zoom"onchange="objPie.Zoom(this.value)">
  298. <optionvalue="0.2"selected=true>20%</option>
  299. <optionvalue="0.25">25%</option>
  300. <optionvalue="0.4">40%</option>
  301. <optionvalue="0.5">50%</option>
  302. <optionvalue="0.75">75%</option>
  303. <optionvalue="0.8">80%</option>
  304. <optionvalue="1">原始大小</option>
  305. <optionvalue="1.25">125%</option>
  306. <optionvalue="1.5">150%</option>
  307. <optionvalue="2">200%</option>
  308. <optionvalue="3">300%</option>
  309. <optionvalue="4">400%</option>
  310. </select>
  311. </body>
  312. </html>
分享到:
评论

相关推荐

    js 封装VML的饼图,柱状图,折线图

    在JavaScript中,通过VML实现饼图需要计算每个扇区的角度和位置,然后用VML形状元素(如`&lt;v:shape&gt;`)绘制出各个扇区。每个扇区的颜色、大小和标签都需要根据数据动态设置。饼图的交互功能,如点击高亮或悬停显示...

    VML饼图,PHP版

    VML饼图,PHP版。 VML只有IE支持。 演示: http://www.liuyuanjun.com/test/chart0.php

    js_vml_饼图__柱状图_曲线图

    ### js_vml_饼图__柱状图_曲线图知识点详解 #### 一、VML简介 VML(Vector Markup Language)是一种由微软开发的矢量图形标记语言,它主要用于在Internet Explorer浏览器中创建动态和静态的矢量图形。VML允许开发者...

    Vml制作的3D饼图

    在提供的文件`Vml-3DPie.html`中,我们可以期待看到一个使用VML实现的3D饼图实例。这个文件可能包含了HTML结构、CSS样式和JavaScript代码,用于绘制和操作饼图。通过查看和学习这个示例,你可以更好地理解如何利用...

    使用VML生成3D饼图

    在本实例中,我们结合了VML和JavaScript来创建3D饼图,同时也支持单个饼块的浮动动画效果,使得数据展示更加生动有趣。** 首先,理解VML的基本结构。VML文档通常由`&lt;v:shape&gt;`、`&lt;v:fill&gt;`、`&lt;v:path&gt;`等元素组成,...

    VML柱状图饼图线形图

    VML饼图** 饼图用于显示部分与整体的关系。在VML中,我们首先需要计算每个扇区的角度,然后创建一系列的椭圆弧线来形成饼图。下面是一个简单的扇形示例: ```xml ; width:200px; height:200px;"&gt; &lt;!-- 更...

    用vml画饼状图用vml画饼状图用vml画饼状图用vml画饼状图

    用vml画饼状图用vml画饼状图用vml画饼状图用vml画饼状图

    Echarts+ajax+java+mysql实现饼图+折线图+柱状图

    Echarts是一个基于SVG/VML/Canvas的高性能、跨浏览器、跨平台的图表库,支持多种图表类型,如折线图、柱状图、饼图、散点图等。它提供了一套完整的API和交互设计,使得开发者能够方便地进行图表配置和定制,实现...

    vml饼图

    给予vml的一个统计饼图,非常漂亮,支持动作

    柱状图和饼图VML脚本

    在提供的压缩包文件"vmlGraph"中,可能包含了实现柱状图和饼图的JavaScript代码示例。这些代码通常会包含解析数据、计算图形属性、生成和操作VML元素等功能。通过学习和理解这些代码,开发者可以更好地掌握如何在不...

    使用VML生成3D饼图、3D柱图、折线图

    在提供的"vml statistical shape2"文件中,可能包含了实现这些功能的源代码、样例数据或者样式文件。分析这些文件可以帮助我们深入理解这个程序的工作原理和实现细节。如果你需要进一步的信息,如具体的代码解释或...

    纯asp使用vml绘线柱饼图

    在这个场景中,“纯asp使用vml绘线柱饼图”是一个独特的实践,它利用了VML(Vector Markup Language)来在网页上生成图形。 VML是微软提出的一种矢量图形语言,它允许开发者在IE浏览器中创建和显示复杂的图形。尽管...

    vml柱图,饼图,曲线图

    在JavaScript中,开发者可以利用VML来创建各种图表,如柱状图、饼图和曲线图,以可视化数据。下面我们将详细探讨这些图表的实现和相关知识点。 1. **VML基础** VML是一种基于XML的语言,它可以精确地描述图形元素...

    vml绘线柱饼图``````

    虽然VML本身并不直接支持交互性,但可以通过JavaScript来实现。例如,可以添加事件监听器,使得用户点击柱子或扇区时触发特定动作,或者动态改变图形的属性以反映实时数据变化。 6. 兼容性和替代方案: VML主要在...

    SVG,VML,FLASH三种实现统计饼图的方式比较.pdf

    SVG,VML,FLASH三种实现统计饼图的方式比较.pdf

    VML 画图 统计图、柱状图、饼图、折线图

    在"VML 画图 统计图、柱状图、饼图、折线图 Powered by MicroSystem_cn.mht"这个文件中,很可能是提供了一个使用VML实现这些图形的示例,包括具体的代码和展示效果。通过查看这个文件,你可以深入学习如何在不支持...

    pai.rar_饼图

    描述提到,这个饼图的实现是基于VML技术,这意味着它可能特别适用于那些需要在较旧版本的Internet Explorer上运行的项目。VML是一种XML方言,用于创建和展示矢量图形,这使得图形在放大时仍能保持清晰。此外,描述中...

    asp\asp.net统计图VML(asp版加asp.net版,含饼图、曲线图、柱图)

    在给定的资源中,"asp\asp.net统计图VML"是一个关于如何在ASP和ASP.NET中创建统计图表的教程或组件,主要涵盖了饼图、曲线图和柱图这三种常见的数据可视化形式。 VML,全称Vector Markup Language,是一种用于在...

    vml绘画的柱状图,饼图,折线图

    使用Vml绘制的柱状图,饼图,折线图,功能强大,可以满足一般的绘制需求!

    raphael 统计图 饼图

    在Raphaël中,我们可以通过自定义函数来实现饼图的绘制。首先,我们需要创建一个Raphaël画布,指定其在页面上的位置和大小。然后,我们可以为每个数据段创建一个`path`元素,使用`arc`路径命令来描绘饼图的扇区。`...

Global site tag (gtag.js) - Google Analytics