以文本方式查看主题

-  中文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=83746)


--  作者:Cwjnet
--  发布时间:3/7/2010 3:37:00 PM

--  SVG怎么设置动态菜单?

    <g id="Earth7" transform="translate(1845.5,1011) rotate(0)" onclick="attr(evt)" onmouseover="choice(evt)" onmouseout="unchoice(evt)">
      <use transform="translate(0 0)" x="-10" y="-10" width="20" height="20" xlink:href="#ground" class="un" />
    </g>
    <g id="line49" onclick="attr(evt)" onmouseover="choice(evt)" onmouseout="unchoice(evt)">
      <polyline points="1845.5,996.7 1845.5,1007" class="l500" />
    </g>
function setmenu()
{
  if (svgSelector) {
     //setmenu1(svgSelector)
  }
  else {
     //setmenu2(default)
  }
}
function choice(evt)
{
  svgSelector=evt.target;
  setmenu();
}
function unchoice(evt)
{
  svgSelector=null;
  setmenu();
}
以上是一个简单的代码示例,想要实现的效果是:我在不同的对象上出现不同的右键菜单。
由于SVG中没有找到右键弹出事件,所以没办法在菜单弹出前修改菜单。
所以我改成在每次对象获得或失去焦点的时候设置菜单
(效率有点低,因为对象获得一次焦点不一定会使用菜单)。
但是在弹出菜单的时候,本来有焦点的对象就会失去焦点,
导致当前对象svgSelector=null;被清空。
各位大侠有什么好办法?


[此贴子已经被作者于2010-3-8 21:35:56编辑过]

--  作者:Cwjnet
--  发布时间:3/19/2010 11:21:00 AM

--  
已经解决。SVG在鼠标点击时可以有一个
onmousedown="mousedown(evt)"
事件,并且该事件可以接受evt.target参数,表示点击的对象,
并且事件发生在右键菜单弹出之前,只要在这里设置动态菜单就可以了。
evt.button=2表示点击的是右键,evt.button=0表示点击的是左键。


[此贴子已经被作者于2010-3-21 8:17:55编辑过]

W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
31.250ms