以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 SVG/GML/VRML/X3D/XAML 』  (http://bbs.xml.org.cn/list.asp?boardid=21)
----  SVG--关于动态加载右键菜单的问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=21&rootid=&id=38719)


--  作者:kun331
--  发布时间:10/10/2006 4:41:00 PM

--  SVG--关于动态加载右键菜单的问题
关于动态加载右键菜单的问题:

功能描述:对SVG图形中的不同对象点右键后弹出不同的菜单。

SVG文件menu.svg,如下:
<?xml version="1.0"?>
<svg>
<script type="text/javascript">
function fileLoaded(data)
{
  if(data.success)
  {
     var newMenuRoot=parseXML(data.content,contextMenu);
     contextMenu.replaceChild(newMenuRoot.firstChild,contextMenu.firstChild);  
  }
}
function menu1(evt)
{
  if(evt.button==2)
  {
     getURL("menu1.xml", fileLoaded);
  }
}
function menu2(evt)
{
  if(evt.button==2)
  {
     getURL("menu2.xml", fileLoaded);
  }
}
</script>
<rect onmousedown="menu1(evt)" x="2cm" y="1cm" width="6cm" height="3cm" fill="blue"/>
<rect onmousedown="menu2(evt)" x="2cm" y="5cm" width="6cm" height="3cm" fill="red"/>
</svg>

menu1.xml文件:
<menu>
<item>blue</item>
</menu>

menu2.xml文件:
<menu>
<item>red</item>
</menu>

问题是:切换对象后的第一次右键菜单是错的,第二次才正确。感觉是getURL("menu1.xml", fileLoaded)对本次的右键菜单无效!
大家有没有好的办法?


--  作者:tamefox
--  发布时间:10/12/2006 8:31:00 AM

--  
不要每次都调用getURL函数加载菜单。
不出错的最好办法就是在使用该菜单之前已经将它载入内存,我建议你在初始化时将两个菜单同时载入,以后直接调用即可。

--  作者:kun331
--  发布时间:10/12/2006 1:34:00 PM

--  
谢谢!如何“将两个菜单同时载入内存”?以上代码该如何改写呢
--  作者:tamefox
--  发布时间:10/14/2006 11:05:00 AM

--  
定义一个加载菜单的函数addMenu
function addMenu(menuname){
  getURL(menuname, fileLoaded);
  function fileLoaded(data){
     if(data.success){
            var menu= parseXML(data.content,document);
            将menu加入SVG中的defs元素中,就可以了
      }    
  }
}



--  作者:kun331
--  发布时间:12/21/2006 5:02:00 PM

--  
关键是如何加到SVG的defs中???
defs.appendChild(menu.firstChild);会出错,因为menu.firstChild是普通的Element类型,不是SVGElement类型!怎么办?
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
89.844ms