首頁 >web前端 >js教程 >JS實作的自訂右鍵選單實例二則_javascript技巧

JS實作的自訂右鍵選單實例二則_javascript技巧

WBOY
WBOY原創
2016-05-16 15:41:111122瀏覽

本文實例講述了JS實作的自訂右鍵選單。分享給大家供大家參考。具體如下:

範例1:

運作效果截圖:

具體程式碼如下:

<!DOCTYPE html>
<html>
 <head>
 <title>JS实现自定义右键菜单</title>
 <meta http-equiv="content-type" content="text/html; charset=utf-8">
 <script src="ajax.js"></script>
 <style type="text/css">
 #container {
  text-align : center;
  width : 500px;
  height : 500px;
  border : 1px solid blue;
  margin : 0 auto;
 }
 .skin {
  width : 100px;
  border : 1px solid gray;
  padding : 2px;
  visibility : hidden;
  position : absolute;
 }
 div.menuitems {
  margin : 1px 0;
 }
 div.menuitems a {
  text-decoration : none;
 }
 div.menuitems:hover {
  background-color : #c0c0c0;
 }
 </style>
<script> 
window.onload = function() {
 var container = document.getElementById('container'); 
 var menu = document.getElementById('menu');
 /*显示菜单*/
 function showMenu() {
 var evt = window.event || arguments[0];
 /*获取当前鼠标右键按下后的位置,据此定义菜单显示的位置*/
 var rightedge = container.clientWidth-evt.clientX;
 var bottomedge = container.clientHeight-evt.clientY;
 /*如果从鼠标位置到容器右边的空间小于菜单的宽度,就定位菜单的左坐标(Left)为当前鼠标位置向左一个菜单宽度*/
 if (rightedge < menu.offsetWidth)  
  menu.style.left = container.scrollLeft + evt.clientX - menu.offsetWidth + "px";  
 else
 /*否则,就定位菜单的左坐标为当前鼠标位置*/
  menu.style.left = container.scrollLeft + evt.clientX + "px";
 /*如果从鼠标位置到容器下边的空间小于菜单的高度,就定位菜单的上坐标(Top)为当前鼠标位置向上一个菜单高度*/
 if (bottomedge < menu.offsetHeight)
  menu.style.top = container.scrollTop + evt.clientY - menu.offsetHeight + "px";
 else
 /*否则,就定位菜单的上坐标为当前鼠标位置*/
  menu.style.top = container.scrollTop + evt.clientY + "px";
 /*设置菜单可见*/
 menu.style.visibility = "visible";  
 LTEvent.addListener(menu,"contextmenu",LTEvent.cancelBubble);
 }
 /*隐藏菜单*/
 function hideMenu() {
 menu.style.visibility = 'hidden';
 }    
 LTEvent.addListener(container,"contextmenu",LTEvent.cancelBubble);
 LTEvent.addListener(container,"contextmenu",showMenu);
 LTEvent.addListener(document,"click",hideMenu);   
}
</script>
 </head>
 <body>
 <div id="menu" class="skin">
 <div class="menuitems">
  <a href="javascript:history.back();">后退</a>
 </div>
 <div class="menuitems">
  <a href="javascript:history.back();">前进</a>
 </div>
 <hr>
 <div class="menuitems">
  <a href="" target="_blank">地图api</a>
 </div>
 <div class="menuitems">
  <a href="" target="_blank">实时交通</a>
 </div>
 <div class="menuitems">
  <a href="" target="_blank">地图搜索</a>
 </div>
 <div class="menuitems">
  <a href="" target="_blank">驾驶导航</a>
 </div>
 <hr>
 <div class="menuitems">
  <a href="" target="_blank">灵图UU</a>
 </div>
 <div class="menuitems">
  <a href="" target="_blank">路书下载</a>
 </div>
 <hr>
 <div class="menuitems">
  <a href="" target="_blank">关于本站</a>
 </div>
 <div class="menuitems">
  <a href="" target="_bland">友情链接</a>
 </div>
 </div>
 <div id="container"> 
 <p>右键此区域</p>
 </div>
 </body>
</html>

其中ajax.js程式碼如下:

複製程式碼 程式碼如下:

var _LT_ajax_proxyXmlUrl="http://srvfree.api.51ditu.com/apisrv/p4x?";function LTNS(){LTNS.info={時間:'2012 年7 月19 日星期四10:00:08 UTC 0800 2012 ',版本: '1',ov:'1.3 Ver 20070705'};var w=function(uq){var iq=0,oq=0;var pq=uq.length;var aq=new String();var sq=-1 ;var dq=0;for(var fq=0;fq=97)?(gq-61):((gq>=65)?(gq-55):(gq-48))));oq=(oq=8){var hq=oq>>(iq-8);if(dq>0){sq=(sq=224){sq=hq&(0xf);dq=2;}else if(hq>= 128 ){sq=hq&(0x1f);dq=1;}else{aq =String.fromCharCode(hq);};};oq=oq-(hq; 1){var uq=參數[0]._LT_E_;for(var iq=0;iq=0; iq--){if(oq[iq]==yq){oq.splice(iq,1);break;};};}catch(pq){};oq=a.allEvents; for(var iq= oq.length-1;iq>=0;iq--){if(oq[iq]==yq){oq.splice(iq,1);break;};};while(yq .length>0) {yq.pop()};刪除yq;};函數b(yq,事件){if(!yq||!yq._LT_E_){return;};var uq,iq=yq._LT_E_ ;for(var oq =iq.length-1;oq>=0;oq--){uq=iq[oq];if(!event||uq[1]==event){v(uq);} ;};};函數n(){var yq=a.allEvents;if(yq){for(var uq=yq.length-1;uq>=0;uq--){v(yq[uq]) ;};}; a.allEvents=null;};函數m(yq,event,uq){if(d(yq)){try{if(yq.fireEvent){yq.fireEvent(q[16] event) ;};if( yq.dispatchEvent){var iq="mouseover,mouseout,mousemove,mousedown,mouseup,click,dbclick";var oq=o.createEvent("事件");oq.initEvent(event,false,true );yq.dispatchEvent (oq);};}catch(pq){alert('LTEvent.觸發錯誤。 ');};}else{if(!uq){uq=[];};var aq=yq._LT_E_;if( aq&&aq.length>0){for(var sq=aq.length-1;sq> =0;sq--){var dq=aq[sq];if(dq&&dq[2]){if(dq[1] ==“*”){dq[2].apply(yq,[event,uq ]);};if(dq[1]==event){dq[2].apply(yq,uq);}; };};};};};function _(){return o.all? (o.readyState!="loading"&&o.readyState!=q[12]):(a.readyState==q[11] )};函數Q(){if(!a.unLoadListener){a.unLoadListener= c(i,q[13],n);};if(!o.all&&!a.readyState){a.readyState= q[12];c(o,"DOMContentLoaded",function(){a.readyState =q[11];},true);};};yq(a,{getCallback:s,isHtmlControl:d,getObjWin: f,getWindowEvent:g,createAdapter:h,cancelBubble:j,returnTrue:k,bind: l,deposeNode:z,runOnceHandle:x,addListener:c,removeListener:v,clearListeners:b,clearAllListeners:n,trigger:m, isDocumentLoaded:_,負載:Q});函數W(yq,uq){var e =this;e[0]=yq?parseInt(yq):0;e[1]=uq?parseInt(uq):0 ;e.Longitude=e[0];e.Latitude=e[1];} ;yq(W.prototype,{getLongitude:function(){var e=this;return e[0];},getLatitude:function (){var e=this;return e[1];},setLongitude:function( yq){var e=this;e[0]=parseInt(yq);},setLatitude:function(yq){var e=這;e[1]=parseInt(yq);}});函數 E(yq){var e=this;e.win=yq?yq:i;};yq(E.prototype,{load:function(yq,uq,iq,oq){var e=this; if(!e.onLoadStart(yq)){return;};e.objName=oq?oq:"_OLR";var pq=e.win;pq[e.objName]=null;var uq=uq?uq: q[6];if(!e.jsFile){e.jsFile=pq.document.createElement(q[17]);e.jsFile.type=w("T6LuT2zgONPXSsDoQN1q");e.jsFile.defer=true; pq.document.body.insertBefore(e.jsFile,pq.document.body.firstChild);l(e.jsFile,"readystatechange",e,e.onReadyStateChange);l(e.jsFile,"load",e, e.onLoad);};e.jsFile.charset=uq;e.jsFile.src=yq;e.running=true;e.crypt=iq;},onLoadStart:function(yq){var e=this;m (e,"loadstart",[yq]);回傳true;},onLoad:function(yq){var e=this;var uq=e.win;if(uq[e.objName]){var iq=uq [e.objName];uq[e.objName]=null;m(e,q[10],[e.parseObject(iq)]);}else{m(e,q[9],[]); };if(!o.all&&e.jsFile&&e.jsFile.parentNode==uq.document.body){e.jsFile.removeAttribute("src");uq.document.body.removeChild(e.jsFile);刪除e. jsFile;};e.running=false;},parseObject:function(yq){var e=this;if(e.crypt||yq.e){U(yq);};return yq;},onReadyStateChange: function(yq){var e=this;if(!e.jsFile||(e.jsFile.readyState!=q[10])){return;};e.onLoad();}});function R( yq,uq,iq,oq){var oq=oq?oq:i;var pq={url:yq,句柄:uq,字元集:iq,win:oq,classNum:1};var aq=I(oq ) ;l(aq,q[10],pq,T);l(aq,q[9],pq,T);aq.load(yq,iq);};函數T(yq){var e=這個;e.classNum--;if(yq&&yq._classUrls){var uq;while(uq=yq._classUrls.pop()){e.classNum;R(uq,Y(e),e.charset,e. win );};};if(e.classNum==0){e.handle.apply(e);};};函數Y(yq){return function(){yq.classNum--;if(yq 。 classNum==0){yq.handle.apply(yq);};};};函數U(yq){var uq;if(yq.t){yq.t=A(yq.t);}; for(uq in yq.a){if(typeof yq.a[uq]==q[8]){yq.a[uq]=A(yq.a[uq]);};};for(uq在yq.c){if(typeof yq.c[uq]!=q[15]){U(yq.c[uq]);};};};函數I(yq){var yq=yq? yq:i;var uq;if(!yq._LT_OLRS){yq._LT_OLRS=[];};for(var iq=0;iq=2048){iq=(iq>12)| 0xe0) >6)|0x80)=128) {iq=(iq>6)|0xc0)=6){var dq=iq>>(uq-6);iq=iq-(dq0){var dq=iq=97)?(fq-61):((fq>=65)?(fq-55):(fq-48))));iq=(iq=8){var gq=iq>>(uq-8);if(sq>0){aq=(aq=224){aq=gq&(0xf);sq=2; }else if(gq>=128){aq=gq&(0x1f);sq=1;}else{pq.push(String.fromCharCode(gq));};};iq=iq-(gq=3&&sq

示例2:

运行效果截图如下:

具体代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>自定义右键菜单</title>
<style type="text/css"> 
body,ul,li{margin:0;padding:0;}
body{font:12px/24px arial;}
#menu{position:absolute;top:-9999px;left:-9999px;width:100px;border-radius:3px;list-style-type:none;border:1px solid #8f8f8f;padding:2px;background:#fff;}
#menu li{position:relative;height:24px;padding-left:24px;background:#eaead7;vertical-align:top;}
#menu li a{display:block;color:#333;background:#fff;padding-left:5px;text-decoration:none;}
#menu li.active{background:#999;}
#menu li.active a{color:#fff;background:#8f8f8f;}
#menu li em{position:absolute;top:0;left:0;width:24px;height:24px;background:url(images/ico.png) no-repeat;}
#menu li em.cur{background-position:0 0;}
#menu li em.copy{background-position:0 -24px;}
#menu li em.paste{background-position:0 -48px;}
</style>
<script type="text/javascript"> 
window.onload = function ()
{
 var oMenu = document.getElementById("menu");
 var aLi = oMenu.getElementsByTagName("li");
 //加载后隐藏自定义右键菜单
 oMenu.style.display = "none";
 //菜单鼠标移入/移出样式
 for (i = 0; i < aLi.length; i++)
 {
 //鼠标移入样式
 aLi[i].onmouseover = function ()
 {
  this.className = "active" 
 };
 //鼠标移出样式
 aLi[i].onmouseout = function ()
 {
  this.className = "" 
 }
 }
 //自定义菜单
 document.oncontextmenu = function (event)
 {
 var event = event || window.event;
 var style = oMenu.style;
 style.display = "block";
 style.top = event.clientY + "px";
 style.left = event.clientX + "px";
 return false;
 };
 //页面点击后自定义菜单消失
 document.onclick = function ()
 {
 oMenu.style.display = "none" 
 }
};
</script>
</head>
<body>
<center>自定义右键菜单,请在页面点击右键查看效果。</center>
<ul id="menu">
 <li><em class="cut"></em><a href="javascript:;">剪切</a></li>
 <li><em class="copy"></em><a href="javascript:;">复制</a></li>
 <li><em class="paste"></em><a href="javascript:;">粘贴</a></li>
</ul>
</body>
</html>

完整实例代码点击此处本站下载

希望本文所述对大家的javascript程序设计有所帮助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn