VML入门 - 用我们的画笔绘多彩世界

VML入门 用我们的画笔绘多彩世界

 

什么是vml? VML相当于IE里面的画笔,能实现你所想要的图形,而且结合脚本,可以让图形产生动态的效果。VML的全称是Vector Markup Language(矢量可标记语言),矢量的图形,意味着图形可以任意放大缩小而不损失图形的质量,这在制作地图上有很大用途。在VML里面,标记使用的是XML扩张,需要一个namespace(命名空间),你可以使用惯用的“v”作为命名空间,使用IE5.0IE6.0通用的定义如下:

<html xmlns:v="urn:schemas-microsoft-com:vml">

<STYLE>

v/:* { Behavior: url(#default#VML) }

</STYLE>

xmlns 全称就是XML NameSpace 也就是命名空间。Behavior(行为)也是IE5.0新推出的东西,它的功能非常强大,结合样式表,可以给任何HTML对象增加行为(新的属性、方法、事件),而在这里,它的用处是把命名空间“v”和系统预定义的行为VML连接。这样定义以后,你就可以使用下面的标记了,和普通的HTML标记有所区别,每个标记都增加了一个命名空间:

<v:shape></v:shape>

 

和其他HTML元素一样,VML标记里面可以定义DHTML大部分属性和事件,比如说id,name,title,onmouseover等等。在写法上VML比较灵活,很多属性既可以写在标记里面,又可以独立出一个新的标记来表示:

 

<v:shape id=shape1 name=shape1 οnmοuseοver="alert(this.id)" StrokeColor=red

Path="m 0, 0 l 10,10 x e"></v:shape>

等同于下面的写法:

<v:shape id=shape1 name=shape1 οnmοuseοver="alert(this.id)">

<v:Stroke StrokeColor=red/>

<v:Path v="m 0, 0 l 10,10 x e"/>

</v:shape>

 

当然不是所有的属性都可以写成独立的标记,常用的比如说上面的 Stroke(按我的理解可以翻译成线性)PathShadowFill(填充)等,VML这样的方式可以理解为 shape 的属性分类,使属性更直观。

Shape 对象派生出来的一些对象,更加直接的图象,比如说 Rect(矩形)RoundRect(圆边的矩形)Oval()Line(线)PolyLine(不规则折线)Image(图形文件)等等,以后将对这些对象细细描述。

ShapeVML最基本的对象,利用它可以画出所有你想要的图形。在VML中,使用的坐标并不是Document的坐标,它有自己的坐标系,这样一来,动态改变它的坐标,就可以实现放大、缩小、旋转等功能了。shape CoordSize 属性就是用来定义坐标的,它有两个参数,<v:shape CoordSize="2800,2800" /> 这里的2800,2800 是横纵坐标被分成了2800个点,并不是HTML里面默认像素。如果没有设置圆点,VML默认是 0,0 (左上角),当然你也可以使用 CoordOrig 属性设置VML的圆点坐标。

<v:shape CoordOrig="-1400,-1400" CoordSize="2800,2800" style="width:500;height:500" />

注意:定义的坐标只是相对的,真正显示的图形大小还需要 style="width:500;height:500" 来定义!

上面的定义后,你可用的坐标是 x(-14001400) y(-14001400) ,这样的坐标就像数学里面的坐标了,把画版分成了四个块。

在解决实际问题的时候,我发现,IE会自动把可见的VML图象放在相对的(0,0)位置,意思是说,上面两张图如果没有增加两个辅助的坐标,在IE上显示出来是并列的两个正方形。

shape中最主要的属性是Path,它是个功能强大的画笔,语法很简单,由几个字母组成,下面详细讲述:

m x,y:MoveTo把画笔移动到 (x,y)

l x,y:LineTo从当前点到(x,y)画一条线;可以给连续的几个点,VML会连续画出来直到遇到 x 命令。

x:Close结束一条线;

e:End结束画图

 

shape的其他常用属性:

FillColor:填充颜色,使用HTML中规定的颜色;例如:fillcolor=red

Filled:是否要填充图形,如果图形不是封闭的,也会自动封闭图形进行填充。当Filled="true"(默认),fillcolor才有效果;

StrokeColor:线的颜色;

StrokeWeight:线的宽度;

Title:当鼠标移动到该图形上的时候,显示的文字,和HTML里面的alttilte一样;

Type:指定该图形属于那个ShapeTypeShapeType可以为VML制定模版,将在以后加以描述;

前面的这些属性,FillColorFilled可以在<v:Fill />中使用,StrokeColorStrokeWeight可以在<v:Stroke />中使用。也可以在 Shape 或者 继承Shape的对象中使用它。

在下面几节,将详细介绍 Shape 延伸出来的一些具体对象,诸如 RectRoundRectOvalLine等对象。

Line是做图中最常用的,它有两个特殊的属性 from to ,就是起始点和终止点坐标。

<v:line from="0,0" to="100,50" style="position:relative;"/>

 

●如果要改变线的样式,LineStyle (Stroke)属性可以做到:

Single(默认)ThinThinThinThickThickBetweenThin

●如果要改变线的类型,可以用 DashStyle(Stroke)属性:

 

<v:line style="position:relative" from="0,0" to="100,0" >

<v:stroke dashstyle="Dot"/>

</v:line>

 

Solid(默认):见上图

ShortDash:

ShortDot:

ShortDashDot:

ShortDashDotDot:

Dot:

Dash:

LongDash:

DashDot:

LongDashDot:

LongDashDotDot:

●在画坐标的时候,需要箭头,VML已经定义好了箭头,在Stroke体现:EndArrow StartArrow 属性,一个是线开始的时候有箭头,另一个是线结束的时候有箭头。箭头的样式也有不少:

 

<v:line style="position:relative" from="0,0" to="100,0" >

<v:stroke EndArrow="Classic"/>

</v:line>

 

EndArrow="Block":

EndArrow="Classic":(这个看起来还比较舒服)

EndArrow="Diamond":

StartArrow="Oval":

StartArrow="Open":

 

 

PolyLine Line 的变形,是不规则的连续的线。它有个特殊的属性 Points ,用来设置每个点的坐标。例如:

 

<v:PolyLine filled="false" Points="0,0 0,100 20,150 200,100" style="position:relative"/>

 

 

一样可以设置它的线的样式和类型以及箭头 ( IE5.0中,PolyLine不支持 Arrow )

 

<v:PolyLine filled="false" Points="0,0 0,100 20,150 200,100" style="position:relative"/>

<v:stroke StartArrow="Oval" EndArrow="Classic" dashstyle="Dot" />

</v:PolyLine>

 

VML画矩形,必须设置 style="width:50;height:50",其他就没有什么特别的。在这节,顺便讲讲 shadow 对象和 TextBox对象:

<v:Rect style="position:relative;width:100px;height:50px"/>

 

RoundRect顾名思义,是圆角的矩形,这种形状在画流程图的时候很常用,如果加上阴影,就更好看了:

<v:RoundRect style="position:relative;width:100;height:50px">

<v:shadow on="T" type="single" color="#b3b3b3" offset="5px,5px"/>

</v:RoundRect>

 

VML里面,True False 可以简写成 T FShadow 中的 offset 属性用来设置 偏移原图的 x,y 值。 on 属性用来决定是否显示阴影。在矩形中写字,要用到 TextBox 对象。TextBox 比较关键的属性是 inset(left,top,right,bottom),意思是隔图形边的上下左右多少范围内定位文字:

<v:RoundRect style="position:relative;width:120;height:50px">

<v:shadow on="T" type="single" color="#b3b3b3" offset="5px,5px"/>

<v:TextBox inset=" 5pt , 5pt , 5pt , 5pt " style="font-size: 10.2pt ;">Hello world!</v:TextBox>

</v:RoundRect>

Hello world!

当然你也可以直接插入HTML代码,比如说插入一个

<div style="padding-top:5px;padding-left:5px;padding-right:5px;padding-bottom:5px">Hello World!</div>

效果是一样的。

VML画圆(Oval)是非常简单的,只要设置圆的高和宽就可以了。当然定位也是常用的:

 

<v:oval style="position:relative;left:5;top:5;width:100;height:80"/>

 

还要注意的是,topleft是圆的左上角坐标,width height 是圆的宽和高,不是圆的半径。其圆心坐标是(left-width/2,top-height/2)

说到圆,不得不想到弧(arc) VML已经定义了弧对象,它有除了圆的基本性质外,两个特殊的属性startangle endangle ,就是起始角度和结束角度,单位是度,而不是弧度:

 

<v:arc filled=false style="position:relative;width:100;height:100" StartAngle="0" EndAngle="270" />

注意到没有,0角度是从平常的90度开始的。

Image 对象从外部调用一个图形文件,只要IE能够显示的格式都可以。需要注意的是,VML只用来显示这张图片,并没有将这图片矢量化,如果以后放大缩小,画质会改变的。

 

<v:image src="big.GIF" style="position:relative;top:0;left:0;width:165;height:157" />

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1章4节:VML语言入门 1:VML语言入门 - 极道学法 在我正式开始讲解、你正式开始学习VML语言以前,请务必遵循以下规则,可以达到最佳效果、极道学习方法。 1:如果你学过HTML、CSS或精通HTML、CSS,那么建议你把学VML的过程看做跟学HTML的过程是一样的,因为,根本就是大同小异。 2:从本章节和本章节以后的每一个章节,我会使用最简单、易懂、有效的语言讲解和分析。但这是不够的,重要的是,你一定要活学活用。毕竟就算是神剑,如果握在不会用它的人手中,只会糟蹋了这把剑。活学活用是你未来实战应用、独立开发的关键…… 3:建议学习时,开启Lshdic2005、或Editplus、或其他HTML/VML代码编辑器、甚至是记事本。每学会一个标记,就要综合以前学的标记、新学的标记,练习、写出不同的效果,如此才能加深你对该标记的理解、以后会很好的使用、更重要的是巩固以前所学的标记不至于学新忘旧。有基底的IT精英,可以边学、边分解FlashVml3.0所制图型的代码,但对于90%的人,我个人不推荐这么做。勤学勤练、VML语言功底是活学活用VML之基础…… 4:如何达到精通?建议每学一个标记、属性、语句等,以后建议能用键盘默写出来(即记在脑子里,不看例子,能直接写出正确的标记、实现自己需要的效果),只要你肯勤学勤练,这并不困难。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值