1、基本概念
VML的全称是Vector Markup Language(矢量可标记语言),VML相当于IE里面的画笔,能实现你所想要的图形,而且结合脚本,可以让图形产生动态的效果。VML是微软1999年9月附带IE5.0发布的。具体内容可以上网搜索。
网址1:http://www.w3.org/TR/1998/NOTE-VML-19980513
2、利用VML实现树形结构图
通过后台数据库查询,查询销售流向。
3、自己动手绘制流程图
效果如图:
- <html xmlns:v="urn:schemas-microsoft-com:vml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=GBK">
- <title>Insert title here</title>
- <style type="text/css">
- v\:*{
- behavior:url(#default#VML);
- }
- v\:RoundRect{
- text-align:center;
- position:relative;
- }
- v\:TextBox{
- vertical-align:middle;
- font-size:13px;
- }
- </style>
- </head>
- <body>
- <div class="grid" align="center">
- <table class="gridbody" cellpadding="1" cellspacing="0" rules="all">
- <tr class="gridtitle">
- <td align="left" colspan="7">供货商所有关联销售信息查询</td>
- </tr>
- <tr class="griditem">
- <td>
- <center>
- <script>
- //第一层树结构
- var incv = new Array();
- incv[0] = "1";
- incv[1] = "IOS111052500018";
- incv[2] = "临沂新程金锣肉制品集团有限公司";
- //第二层树结构
- var dcv=new Array(); //定义一维数组
- dcv[0]=new Array(); //将每一个子元素又定义为数组
- dcv[0][0]='2';
- dcv[0][1]='5000100003';
- dcv[0][2]='华联超市经七超市金锣专柜';
- dcv[1]=new Array(); //将每一个子元素又定义为数组
- dcv[1][0]='3';
- dcv[1][1]='5000100002';
- dcv[1][2]='华联超市世购超市金锣专柜';
- dcv[2]=new Array(); //将每一个子元素又定义为数组
- dcv[2][0]='4';
- dcv[2][1]='5000100001';
- dcv[2][2]='华联超市嘉华超市金锣专柜';
- document.write(drawXX(incv,dcv));
- function drawXX(iobj,dobj){
- v1 = 20+40*(dobj.length-1);
- v2 = v1/2;
- v3 = v2 - 12;
- //alert("start -- ");
- var start = "<v:group coordsize='600,800' style='width:600px;height:800px;'>";
- var is="<v:RoundRect style='width:300px;height:28px;left:0px;top:"
- + v3
- + "px' align='center'>"
- + "<v:shadow on='True' type='single' color='#b3b3b3' offset='5px,5px'/><v:TextBox >"
- + iobj[1] + "(" + iobj[2] + ")"
- + "</a></v:TextBox></v:RoundRect>";
- var ls="";
- ls +="<v:line from='300," + v2 + "' to='340," + v2 + "' />"
- ls +="<v:line from='340,20' to='340," + v1 + "' />"
- var ds ="";
- for(var i=0;i<dobj.length;i++){
- ds +="<v:line from='340," + (20+i*40) + "' to='380," + (20+i*40) + "' />"
- ds +="<v:RoundRect style='width:280px;height:28px;left:380px;top:" + (8+i*40) + "px;' align='center'>"
- ds +="<v:shadow on='True' type='single' color='#b3b3b3' offset='5px,5px'/>";
- ds +="<v:TextBox >" + dobj[i][1] +"("+ dobj[i][2] +")" + "</v:TextBox>";
- ds +="</v:RoundRect>";
- }
- var end = "</v:group>";
- var draws = start + is + ls + ds + end;
- return draws;
- }
- </script>
- </center>
- </td>
- </tr>
- </table>
- </div>
- </body>
- </html>
<html xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>Insert title here</title>
<style type="text/css">
v\:*{
behavior:url(#default#VML);
}
v\:RoundRect{
text-align:center;
position:relative;
}
v\:TextBox{
vertical-align:middle;
font-size:13px;
}
</style>
</head>
<body>
<div class="grid" align="center">
<table class="gridbody" cellpadding="1" cellspacing="0" rules="all">
<tr class="gridtitle">
<td align="left" colspan="7">供货商所有关联销售信息查询</td>
</tr>
<tr class="griditem">
<td>
<center>
<script>
//第一层树结构
var incv = new Array();
incv[0] = "1";
incv[1] = "IOS111052500018";
incv[2] = "临沂新程金锣肉制品集团有限公司";
//第二层树结构
var dcv=new Array(); //定义一维数组
dcv[0]=new Array(); //将每一个子元素又定义为数组
dcv[0][0]='2';
dcv[0][1]='5000100003';
dcv[0][2]='华联超市经七超市金锣专柜';
dcv[1]=new Array(); //将每一个子元素又定义为数组
dcv[1][0]='3';
dcv[1][1]='5000100002';
dcv[1][2]='华联超市世购超市金锣专柜';
dcv[2]=new Array(); //将每一个子元素又定义为数组
dcv[2][0]='4';
dcv[2][1]='5000100001';
dcv[2][2]='华联超市嘉华超市金锣专柜';
document.write(drawXX(incv,dcv));
function drawXX(iobj,dobj){
v1 = 20+40*(dobj.length-1);
v2 = v1/2;
v3 = v2 - 12;
//alert("start -- ");
var start = "<v:group coordsize='600,800' style='width:600px;height:800px;'>";
var is="<v:RoundRect style='width:300px;height:28px;left:0px;top:"
+ v3
+ "px' align='center'>"
+ "<v:shadow on='True' type='single' color='#b3b3b3' offset='5px,5px'/><v:TextBox >"
+ iobj[1] + "(" + iobj[2] + ")"
+ "</a></v:TextBox></v:RoundRect>";
var ls="";
ls +="<v:line from='300," + v2 + "' to='340," + v2 + "' />"
ls +="<v:line from='340,20' to='340," + v1 + "' />"
var ds ="";
for(var i=0;i<dobj.length;i++){
ds +="<v:line from='340," + (20+i*40) + "' to='380," + (20+i*40) + "' />"
ds +="<v:RoundRect style='width:280px;height:28px;left:380px;top:" + (8+i*40) + "px;' align='center'>"
ds +="<v:shadow on='True' type='single' color='#b3b3b3' offset='5px,5px'/>";
ds +="<v:TextBox >" + dobj[i][1] +"("+ dobj[i][2] +")" + "</v:TextBox>";
ds +="</v:RoundRect>";
}
var end = "</v:group>";
var draws = start + is + ls + ds + end;
return draws;
}
</script>
</center>
</td>
</tr>
</table>
</div>
</body>
</html>
4、利用ECOTree提供的js 实现更为复杂的树形结构图
附件 graphic_javascript_tree_src.zip
效果如图:
- <%@ page language="java"%>
- <%@ page contentType="text/html;charset=GBK"%>
- <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>
- <%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt"%>
- <%@ taglib prefix="html" uri="http://struts.apache.org/tags-html"%>
- <html xmlns:v="urn:schemas-microsoft-com:vml">
- <head>
- <title></title>
- <script type="text/javascript" src="../js/ECOTree.js"></script>
- <link rel="stylesheet" href="<c:url value='/css/ECOTree.css' />" />
- <link rel="stylesheet" href="<c:url value='/css/style.css' />" />
- <style type="text/css">
- v\:*{
- behavior:url(#default#VML);
- }
- v\:RoundRect{
- text-align:center;
- position:relative;
- }
- v\:TextBox{
- vertical-align:middle;
- font-size:13px;
- }
- </style>
- <script>
- var t = null;
- function CreateTree() {
- t = new ECOTree('t','recallTreeDiv');
- t.config.iRootOrientation = ECOTree.RO_LEFT;
- t.config.defaultNodeWidth = 246;
- t.config.defaultNodeHeight = 36;
- t.config.iSubtreeSeparation = 20;
- t.config.iSiblingSeparation = 10;
- t.config.linkType = 'B';
- t.config.useTarget = false;
- t.config.nodeFill = ECOTree.NF_GRADIENT;
- t.config.colorStyle = ECOTree.CS_LEVEL;
- //t.config.levelColors = ["#966E00","#BC9400","#D9B100","#FFD700"];
- //t.config.levelBorderColors = ["#FFD700","#D9B100","#BC9400","#966E00"];
- t.config.nodeColor = "#FFD700";
- t.config.nodeBorderColor = "#FFD700";
- t.config.linkColor = "#5555FF";
- <%
- java.util.List list = (java.util.List)request.getAttribute("recallList");
- for(int i=0;i<list.size();i++) {
- Object obj = list.get(i);
- org.mcp.data.logic.BackwardNode2 backwardNode = (org.mcp.data.logic.BackwardNode2)obj;
- %>
- t.add('<%=backwardNode.getBatch()%>','<%=backwardNode.getPbatch()%>','<%=backwardNode.getBatch()%><br/><%=backwardNode.getEnterName()%>');
- <%
- }
- %>
- t.UpdateTree();
- }
- </script>
- </head>
- <body onload="CreateTree();">
- <h4>供货商所有关联销售流向信息示意图 <input type="button" value="返 回" onclick="javascript:window.history.go(-1)"></h4>
- <div id="recallTreeDiv"></div>
- </body>
- </html>