用js操纵过vml的请帮忙,如何读写v:PolyLine的points?

showlin 2007-02-12 01:50:53
直接用obj.points和用getAttribute、setAttribute都试过。。。

试验代码如下


<html xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<STYLE>
v\:* { Behavior: url(#default#VML) }

</STYLE>
<script>
function aa(){
var obj=document.getElementById("pc1-print2");
alert(obj.getAttribute("points"));
alert(obj.points);
obj.setAttribute("points","100,100 200,250 300,400 500,800",0);
// obj.points="100,100 200,250 300,400 500,800";
}
</script>
</head>

<body>
<v:PolyLine id="pc1-print2" filled="false" points="630,330 630,530 480,530" strokeweight="1" style="position:absolute;z-index:10;" strokeColor="blue" fillcolor="blue"><v:TextBox inset="102px,200px,0px,0px" style="font-size:12px;">曲线</v:TextBox><v:stroke EndArrow="Classic"/></v:PolyLine>
<input type="button" name="Submit" value="读写" onclick="aa();"/>
</body>
</html>
...全文
764 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
gxyxd 2009-02-06
  • 打赏
  • 举报
回复
其实做拖动的时候比较简单,不用换算,直接增加一个属性记录坐标数据处理

初始
obj.points.value = event.clientX + ',' + event.clientY;
obj.setAttribute("pointsXY",event.clientX + ',' + event.clientY)

移动
pts = obj.getAttribute("pointsXY") + ' ' + event.clientX + ',' + event.clientY;
obj.setAttribute("pointsXY",pts);
obj.points.value = pts;
showlin 2007-02-13
  • 打赏
  • 举报
回复
无趣的vml,讨厌的单位换算,结贴了~~~~~~
hbhbhbhbhb1021 2007-02-13
  • 打赏
  • 举报
回复
所以说拖动的时候计算相对位移,替换的时候单位都不用换,只换数字
showlin 2007-02-13
  • 打赏
  • 举报
回复
难度不在于points的赋值替换,在于px和pt的换算
例如
<v:polyline points="630,330 630,530 480,530"
在js取值的时候就会变成
472.5pt 247.5pt 等等.....因为牵扯到polyline的即时拖动换算,要把pt和event.clientX值相互换算,很麻烦....
hbhbhbhbhb1021 2007-02-12
  • 打赏
  • 举报
回复
可以把point当成一个字符串替换啊,replace(/(\d+)/,function(a,b){return})这种
showlin 2007-02-12
  • 打赏
  • 举报
回复
两本都看过,美洲豹的的确简单些,入门快
不过现在很少用到vml了,偶尔客户要求表现力强的时候,才会考虑
这个玩意儿,手册太少,太不全面了
就连msdn上对points的描述都没法用
http://msdn.microsoft.com/workshop/author/vml/SHAPE/PREDEF/polyline_points.asp
上面是这样写的:
Script Syntax
element.points="expression"
expression=element.points

靠!
另外
"赋值的时候用replace直接替换会好一点"
不解

考虑统一用pt赋值....
hbhbhbhbhb1021 2007-02-12
  • 打赏
  • 举报
回复
美洲豹的那个教程写得还是有些少,但是很简明易懂
也可以看看风云舞的VML那个,不过他那个功能比较多,要看一阵才能完全看明白
赋值的时候用replace直接替换会好一点
showlin 2007-02-12
  • 打赏
  • 举报
回复
to hbhbhbhbhb1021(天外水火(我要多努力))
这个很成问题....
取出的point都是pt,要和px换算,
目前我是按3:4换算
和屏幕分辨率有关吗?不同分辨率下表现不同?
codeworker999 2007-02-12
  • 打赏
  • 举报
回复
去下载 美洲豹think in vml
里面介绍的蛮详细的
rocy520 2007-02-12
  • 打赏
  • 举报
回复
帮顶了。。。学习中

hbhbhbhbhb1021 2007-02-12
  • 打赏
  • 举报
回复
直接写point不要get set之类的,注意这里的point是相对的,移动的时候很容易出错
haothing 2007-02-12
  • 打赏
  • 举报
回复
obj.points.value = "100,100 200,250 300,400 500,800";
chenguang79 2007-02-12
  • 打赏
  • 举报
回复
帮顶了。。。学习中
stou 2007-02-12
  • 打赏
  • 举报
回复
sofa