zl程序教程

您现在的位置是:首页 >  其它

当前栏目

脚本动态生成VML

生成 脚本 动态 VML
2023-06-13 09:13:51 时间
我们编写VML很重要的就是要和数据库结合,如果和数据库结合了,读数据和把数据转换成VML变成了两部分。如果直接使用ASP生成包含很多VML的页面,一旦数据量多了,整个页面就变得很庞大,下载速度慢了,IE解释代码的速度也慢了,所以用脚本动态生成VML变得非常重要了。

    用VML画一个示意图,可以更明确上面的意义:


    前面的图文简单的说就是:使用一个Iframe做后台,前台用脚本生成。也许担心,后台已经完成了,但前台还没有初始化的情况,你可以放心,因为读数据的过程肯定相对要慢,如果担心数据量少,只要你把脚本放在Body前面,Iframe放在Body的最后面,?就不会产生同步错误的问题了。
    现在来具体讲讲如何用脚本动态产生VML。其实这和用脚本动态产生HTML是一样的过程。
<htmlxmlns:v="urn:schemas-microsoft-com:vml">
<head>
  <title>动态创建VML</title>
</head>
<STYLE>
 v\:*{BEHAVIOR:url(#default#VML)}
</STYLE>
<scriptlanguage="JavaScript">
functioncreatePoint(x,y,v)
{
varstrElement="<v:recttitle=""+v+""style="top:"+x+";left:"+y+"width:100;height:100"></v:rect>";
varnewPoint=document.createElement(strElemnt);
group1.insertBefore(newPoint);
}
</script>
<body>
<v:groupID="group1"style="WIDTH:200px;HEIGHT:200px;"coordsize="200,200">
</v:group>
<iframesrc="readData.asp"name="data"style="display:none"></iframe>
</body>
</html>


相应的在readData.asp里面:

<script>
<%
"数据库连接部分
"读数据部分
DoUntilrs.EOF
%>
  parent.createPoint(<%=x%>,<%=y%>,<%=value%>);
<%
Loop
"数据库关闭部分
%>
</script>

上面的颜色采用HomeSite4.5.2风格

    看完上面的,是否对这种模式有所理解呢?下面谈谈动态生成VML所要注意的一些问题,先说说document的createElement方法。IE版本不同,createElement的使用也有所区别,在早期版本的IE,createElement只能创建Select里面OPTION,比如说varnewOption=document.createElement("OPTION");但在IE5.0以后,createElement可以创建所有的对象,使用的方式是varnewElement=document.createElement("<divid="oDIV"></div>");注意到没有,这里的参数必须是个完成的HTML标记,而不是DIV,用这个方法的好处就是,可以用一个语句把新创建的对象描述清楚。insertBefore方法很好用,它把新创建的对象插入到最后。
    我们一开始就有了Group1,所有以后动态生成的VML直接插入到Group1的后面就可以了。曾经做了三个实验,第一个是普通的,用ASP生成VML代码;第二个是不用Iframe,在同一个页面生成脚本;第三个就是上面的例子,使用Iframe产生脚本。结果在大数据量的条件下,效率最高的是第三个,其次是第二个,第一个有明显的慢的感觉。
    接下来的一节,将讲述VML最激动人心的功能,放大缩小!