zoukankan      html  css  js  c++  java
  • 简单的自定义鼠标右键菜单

    Window95 在PC中引入上下文菜单的概念,即通过鼠标右键调出上下文菜单,不久之后这个概念也被引入web中。

    接下来我们来学习一下如何js自定义鼠标右键的菜单。  1 <!DOCTYPE html>

      2 <html>
      3 <head>
      4     <meta charset="UTF-8">
      5     <title>contextmenu</title>
      6 </head>
      7 <body>
      8 //定义一个div,此处为操作方法的解释
      9   <div id="myDiv">Right click or ctrl + right me to get a custom context menu.
     10   Click anywhere to get the default context menu.</div>
     11 //此处是菜单,但是已通过css样式中的visibility隐藏
     12   <ul id="myMenu" style="position:absolute; visibility:hidden; background-color:silver; list-style:none;">
     13       <li><a href="http://www.nczline.net" target="_blank">Nicholas' site</a></li>
     14       <li><a href="http://www.wrox.com" target="_blank">Wrox site</a></li>
     15       <li><a href="http://www.yahoo.com" target="_blank">Yahoo!</a></li>
     16   </ul>
     17    <script>
     18 //通过这个类来兼容各种浏览器
     19         var EventUtil = {
     20             addHandler: function (element, type, handler) {
     21                 if (element.addEventListener) {
     22                     element.addEventListener(type, handler, false);
     23                 } else if (element.attachEvent) {
     24                     element.attachEvent("on" + type, handler);
     25                 } else {
     26                     element["on" + type] = handler;
     27                 }
     28             },
     29             getEvent: function (event) {
     30                 return event ? event : window.event;
     31             },
     32             getTarget: function (event) {
     33                 return event.target || event.srcElement;
     34             },
     35 
     36             removeEventListener: function (element, type, handler) {
     37                 if (element.removeEventListener) {
     38                     element.removeEventListener(type, handler, false);
     39                 } else if (element.detachEvent) {
     40                     element.detachEvent("on" + type, handler);
     41                 } else {
     42                     element["on" + type] = null;
     43                 }
     44             },
     45             stopPropagation: function (event) {
     46                 if (event.stopPropagation) {
     47                     event.stopPropagation();
     48                 } else {
     49                     event.cancelBubble = true;
     50                 }
     51             },
     52 
     53             preventDefault: function (event) {
     54                 if (event.preventDefault) {
     55                     event.preventDefault();
     56                 } else {
     57                     event.returnValue = false;
     58                 }
     59 
     60             },
     61             getRelatedTarget: function (event) {
     62                 if (event.relatedTarget) {
     63                     return event.relatedTarget;
     64                 } else if (event.toElement) {
     65                     return event.toElement;
     66                 } else if (event.fromElement) {
     67                     return event.fromElement;
     68                 } else {
     69                     return null;
     70                 }
     71 
     72             }
     73      
     74         };
     75     //为整个窗口添加onload事件
     76        EventUtil.addHandler(window,"load",function(event){
     77         var div = document.getElementById("myDiv");
     78          // 为div添加oncontextmenu事件
     79            EventUtil.addHandler(div,"contextmenu",function(event){
     80             //通过EventUtil获取事件
     81             event = EventUtil.getEvent(event);
     82               //传入事件event,禁止默认动作,即不显示浏览器默认的上下文菜单
     83                EventUtil.preventDefault(event);
     84                
     85                 //获取菜单   
     86                var menu = document.getElementById("myMenu");
    87 menu.style.left = event.clientX + "px"; //设置位置 88 menu.style.top = event.clientY + "px"; 89 menu.style.visibility = "Visible"; //设置属性,使其可见 90 91 }); 92 // 为窗口添加一个单击事件,使得单击之后上下文菜单消失 93 EventUtil.addHandler(document,"click",function(event){ 94 document.getElementById("myMenu").style.visibility="hidden"; 95 96 }); 97 98 }); 99 100 </script> 101 102 </body> 103 </html>

    虽然这个例子很简单,但它展示了web上所有自定义上下文菜单的基本结构。只需为这个例子中支持的上下文菜单添加一些css样式,就可以达到非常棒的效果。

    转载请说明出处:http://www.cnblogs.com/kerita

  • 相关阅读:
    如何对Web Part进行调试 cloud
    相见恨晚的68句话,来给大家分享分享……(转载) cloud
    基于python的邮件地址提取小程序
    php.ini 核心配置选项说明
    Snort2.8.1在Windows上的简单使用
    在Visual Studio 2008中编译snort2.8.6.1.tar.gz
    PyDev for Eclipse 简介
    Python中*和**的用法
    Python实现类似switch...case功能
    ubuntu安装mysql多实例
  • 原文地址:https://www.cnblogs.com/kerita/p/4388509.html
Copyright © 2011-2022 走看看