svg实现右键自定义菜单

svg实现右键自定义菜单例子。具体看例子即可
ContractedBlock.gif ExpandedBlockStart.gif svgmenu.htm
 1None.gif<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 2None.gif<html>
 3None.gif<head>
 4None.gif<title></title>
 5None.gif<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
 6None.gif<meta name=ProgId content=VisualStudio.HTML>
 7None.gif<meta name=Originator content="Microsoft Visual Studio .NET 7.1">
 8None.gif<script language="JavaScript" src="svgmenu.js"></script>
 9None.gif</head>
10None.gif<body onload="winLoad()">
11None.gif<table border=1 width=100% height=100% border=0>
12None.gif    <tr>
13None.gif    <td bgcolor=#ff0000>
14None.gif        <embed id="NavigateControl" width="100%" height="100%" src="svgmenu.svg" type="image/svg+xml" style="Z-INDEX: 3080">
15None.gif    </td>
16None.gif    </tr>
17None.gif</table>
18None.gif</body>
19None.gif</html>


ContractedBlock.gif ExpandedBlockStart.gif svgmenu.svg
 1None.gif<?xml version="1.0" encoding="utf-8" ?>     
 2None.gif<svg id="cont" viewBox="0 0 45000 32920" width="45000" height="32920" 
 3None.gif     xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" 
 4None.gif     xml:space="preserve" preserveAspectRatio="none" style="Z-INDEX: 1;">   
 5None.gif  
 6None.gif <defs>
 7None.gif    <style type="text/css">
 8None.gif    <![CDATA[
 9None.gif        .infomation { 
10None.gif            font-weight:normal;
11None.gif            font-size:200px;}
12None.gif        .cursorMove{ cursor:move; }
13None.gif        .cursorAuto{ cursor:auto; }
14None.gif    ]]>
15None.gif    </style>        
16None.gif    <menu id='menu1'>
17None.gif        <header>Menu utilisateur</header>
18None.gif        <item action="CopySVG" id="CopySVG">复制图形</item>
19None.gif        <separator/>
20None.gif       <menu>
21None.gif           <header>背景颜色</header>
22None.gif            <item onactivate="colorit('white')">白色</item>
23None.gif            <item onactivate="colorit('black')">黑色</item>
24None.gif            <item onactivate="colorit('#D0D063')">黄色</item>
25None.gif            <item onactivate="colorit('green')">绿色</item>
26None.gif            <separator/>
27None.gif            <item onactivate="colorit('#008083')">默认</item>     
28None.gif        </menu>
29None.gif        <separator/>
30None.gif        <item action="Pause" id="Pause">暂停</item>
31None.gif        <separator/>
32None.gif        <item id='Menu1.2' onactivate='printit(this)'>打印</item>
33None.gif        <separator/>
34None.gif        <item id='Menu1.1' onactivate='Titi()'>操作说明</item>
35None.gif    </menu> 
36None.gif    <menu id='menu2'>
37None.gif       <item id='Menu1.2' onactivate="showmsg('控件ID')">控件ID</item>
38None.gif    </menu> 
39None.gif </defs>
40None.gif <id="elements"> 
41None.gif    <rect id="rect_back" class="Gas" x="0" y="0" width ="45000" height="32920" fill="#ffff33">
42None.gif    </rect> 
43None.gif    <rect id="gas_1" class="Gas" x="14260" y="17360" width ="1450" height="1450" fill="#00ff33" onmouseover="faireMenus('menu2')" onmouseout="faireMenus('menu1')">
44None.gif    </rect> 
45None.gif </g> 
46None.gif</svg>
47None.gif


ContractedBlock.gif ExpandedBlockStart.gif svgmenu.js
 1None.gifvar CurveControl = null;
 2None.gifvar SvgMainMapDoc = null
 3None.gif
 4ExpandedBlockStart.gifContractedBlock.giffunction winLoad()dot.gif{
 5InBlock.gif    CurveControl = document.getElementById('NavigateControl');
 6InBlock.gif    if(CurveControl==null)
 7InBlock.gif        return;
 8InBlock.gif    SvgMainMapDoc = CurveControl.getSVGDocument();
 9InBlock.gif    
10InBlock.gif    faireMenus("menu1");
11ExpandedBlockEnd.gif}

12None.gif//document.onload = winLoad;
13None.gif
14None.gif//*******************************************************************************************************
15ExpandedBlockStart.gifContractedBlock.gif/**//* 自定义右键菜单 
16InBlock.gif/* hetonghai 2007-03-22
17ExpandedBlockEnd.gif//*******************************************************************************************************/

18ExpandedBlockStart.gifContractedBlock.giffunction faireMenus(udefMenuID)dot.gif{//== udefMenuID:svg预定义的菜单编码 
19InBlock.gif    var udef_menu = udefMenuID;
20InBlock.gif    var mydoc = SvgMainMapDoc;
21InBlock.gif    var contextMenu = CurveControl.window.contextMenu;
22InBlock.gif    var menuXml = CurveControl.window.printNode(mydoc.getElementById(udef_menu));
23InBlock.gif    //alert(menuXml);
24InBlock.gif    CurveControl.window.Titi = Titi;
25InBlock.gif    CurveControl.window.printit = printit;
26InBlock.gif    CurveControl.window.colorit = colorit;
27InBlock.gif    CurveControl.window.showmsg = showmsg;
28InBlock.gif    changeMenus(menuXml);
29ExpandedBlockEnd.gif}

30ExpandedBlockStart.gifContractedBlock.giffunction changeMenus(menuXml)dot.gif{//== xml格式的菜单字符串
31InBlock.gif    var contextMenu = CurveControl.window.contextMenu;
32InBlock.gif    var newMenuRoot = CurveControl.window.parseXML(menuXml, contextMenu);
33InBlock.gif    contextMenu.replaceChild(newMenuRoot, contextMenu.firstChild);
34InBlock.gif    //setMenuAction(contextMenu.firstChild);
35ExpandedBlockEnd.gif}

36ExpandedBlockStart.gifContractedBlock.giffunction setMenuAction(menuRoot)dot.gif{
37InBlock.gif    var len = menuRoot.childNodes.length;
38InBlock.gif    if(len==0return
39ExpandedSubBlockStart.gifContractedSubBlock.gif    for(var i=0;i<len;i++)dot.gif{
40InBlock.gif        var menu = menuRoot.childNodes[i];
41InBlock.gif        //alert(menu);continue;
42InBlock.gif        if(menu==null||menu.nodeName!="item"continue;
43InBlock.gif        var active = menu.attributes['onactivate'];
44ExpandedSubBlockStart.gifContractedSubBlock.gif        if(active!=null&&active.length>0)dot.gif{
45InBlock.gif            menu.addEventListener("activate", active, false);
46ExpandedSubBlockEnd.gif        }

47ExpandedSubBlockEnd.gif    }

48ExpandedBlockEnd.gif}

49None.gif//--------------------------------------------------------------------------
50None.giffunction Titi()
51ExpandedBlockStart.gifContractedBlock.gifdot.gif{
52InBlock.gif    var msg = "温馨提示:\n   该页面为地图显示页面\n   ALT键+鼠标左键:实现图像漫游;\n   Ctrl+鼠标左键:图像放大或拉框放大;";
53InBlock.gif    msg = msg+"\n   Ctrl+Shift+鼠标左键:图像缩小或拉框缩小;";
54InBlock.gif    alert(msg);
55ExpandedBlockEnd.gif}

56ExpandedBlockStart.gifContractedBlock.giffunction printit()dot.gif{
57ExpandedSubBlockStart.gifContractedSubBlock.gif    if (confirm('确定打印吗?'))dot.gif
58ExpandedSubBlockStart.gifContractedSubBlock.gif          try dot.gif{
59InBlock.gif            if(parent) parent.print();
60ExpandedSubBlockEnd.gif          }
 
61ExpandedSubBlockStart.gifContractedSubBlock.gif          catch(e)dot.gif{}
62ExpandedSubBlockEnd.gif    }

63ExpandedBlockEnd.gif}

64ExpandedBlockStart.gifContractedBlock.giffunction colorit(clr)dot.gif//背景色函数
65InBlock.gif    var myob = SvgMainMapDoc.getElementById("rect_back");
66InBlock.gif    if(myob) myob.setAttribute("fill", clr);
67ExpandedBlockEnd.gif}

68ExpandedBlockStart.gifContractedBlock.giffunction showmsg(msg)dot.gif
69InBlock.gif    alert(msg);
70ExpandedBlockEnd.gif}

转载于:https://www.cnblogs.com/hetonghai/articles/684082.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值