客户端VML与SVG Web绘图

上篇介绍的服务器端绘图,有一个很重要的缺点,就是如果图形有变化,比如要将圆移动到另外一个位置,必须回传到服务器重新绘制。页面回传会造成屏幕闪烁,使用起来很不舒服。

那么有没有不需回传的办法呢?答案就是客户端绘图。ActiveX是一种解决方案,我曾经做过一套电力操作票系统,使用ActiveX画图,可以实 现任意需要的交互效果,且无刷新。但是,其安全性是个大问题,即使使用了数字签名很多浏览器也不允许执行,要让客户降低浏览器安全级别允许ActiveX 运行太难了。

值得庆幸的是,目前浏览器开发厂商也在考虑Web绘图的功能,目前使用类似html脚本绘图的有SVG和VML。SVG是一个国际标准,可惜的是如果让IE支持,客户端需要安装一个组件。VML是微软标准,但IE支持就足够了,毕竟目前IE市场份额最大,垄断啊。

言归正传,下面看一下VML绘图

Web电路设计和模拟屏幕截图

 

网页组态和数据实时展示屏幕截图

1.VML绘图入门
新建网站,在Default.aspx源模式下,修改成如下代码:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">

<head runat="server">

    <title>无标题页</title>

    <STYLE>v\:*{behavior:url(#default#VML);}</STYLE>

</head>

<body>

    <form id="form1" runat="server">

    <div>

    <v:Oval fillcolor='red' style='width:100;height:150'/>

<v:oval strokecolor=blue style="position:absolute;z-index:2;left:300;top:100;width:100;height:150">

</v:oval>

    <v:RoundRect FILLCoLOr=green strokecolor=blue style=position:absolute;z-index:3;left:350;top:200;width:100;height:150;color:white;font-size:25px;>

        包含<b>内容</b>

    </v:roundrect>

    </div>

    </form>

</body>

</html>

运行,会看到画了一个红色实心圆(oval是圆)、一个蓝色空心圆和一个圆角矩形。注意代码中我将aspx最上面两行代码删除了,包括那个page,否则图形显示不出来。

从代码看,与html代码没有什么区别,我们只要了解用哪些标签就可以了。下面我们先看一下移动效果。

2.图形移动
下面我们让蓝色空心圆用鼠标点击后,可以跟随鼠标移动。代码如下:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">

<head runat="server">

    <title>无标题页</title>

    <STYLE>v\:*{behavior:url(#default#VML);}</STYLE>

</head>

<body οnmοuseup="mouseUp(event);">

    <script language="javascript">

        var enableMove = false;

        function mouseMove()

        {

             if(enableMove)

             {

                 x.style.posLeft=event.x;

                 x.style.posTop=event.y;

             }

        }

        function mouseDown(oEvent)

        {

            enableMove = true;

            document.οnmοusemοve=mouseMove;

        }

        function mouseUp(oEvent)

        {

            enableMove = false;

        }

    </script>

    <form id="form1" runat="server">

    <div>

    <v:Oval fillcolor='red' style='width:100;height:150'/>

    <v:oval strokecolor=blue style="position:absolute;z-index:2;left:300;top:100;width:100;height:150" id="x" οnmοusedοwn="mouseDown(event);">

    </v:oval>

    <v:RoundRect FILLCoLOr=green strokecolor=blue style=position:absolute;z-index:3;left:350;top:200;width:100;height:150;color:white;font-size:25px;>

        包含<b>内容</b>

    </v:roundrect>

    </div>

    </form>

</body>

</html>

注意阴影部分代码。蓝色空心圆我们给了一个id为x,并将mousedown事件设置为函数mouseDown。该函数先将全局变量enableMove置为true,在mouseMove中,如果该变量为true,则x的位置跟随鼠标移动。Body中增加onmouseup事件,即鼠标松开鼠标后将变量置回false。

可以运行看一下效果。

3.常用VML标签
标签                   图形

Line                   直线

Oval                  圆

Rect                  矩形

RoundRect      圆角矩形

Arc                   圆弧

Image              图片

Polyline          多边形

Fill                  填充

Textbox         文本框

4.VML特有属性
属性名                    默认值         值类型/范围           用途

strokeweight        0.75pt=1px           number        描述图形的边框粗度

strokecolor                black                 color          描述图形的边框颜色

stroked                       true                boolean        描述图形是否使用边框

fillcolor                       white                 color          描述图形的背景颜色

filled                            true               boolean        描述图形是否使用背景

print                            true               boolean        描述图形是否允许被打印机打印

coordsize              1000,1000          Vector2D       暗示图形与容器空间的大小比例

coordorigin                  0,0                Vector2D       coordinate at top-left corner of element

wrapcoords                null                   string          outline to use for tight text wrapping

VML支持id、name、class、title、style等html通用属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值