zoukankan      html  css  js  c++  java
  • HTML5事件-自定义右键菜单

        WEB领域中,为实现上下文菜单,开发人员面临的主要问题是如何确定应该显示这个上下文菜单(Windows 中,右键单击;Mac 中,Ctrl+单击),

    以及如何屏蔽与该操作相关联的默认上下文菜单。

       解决方案:

            contextmenu事件,用以表示何时应该显示上下文菜单,以便取消默认的上下文菜单而提供自定义的菜单。

            contextmenu事件支持冒泡,可以通过为document指定一个事件处理程序,用以处理页面上所有此类事件。

      html代码

     1 <!DOCTYPE html>
     2 <html>
     3     <title></title> 
     4     <body>
     5         <div id="myDiv">
     6                Right click or Ctrl+click me to get a custom context menu.
     7                Click anywhere esle to get the default context menu.
     8         </div>
     9          <ul id="myMenu" style="postion: absolute; visibility: hidden; background: silver;">
    10              <li>
    11                    <a href="http://www.baidu.com">baidu</a>
    12                    <a href="http://www.huawei.com">huawei</a>
    13                    <a href="http://www.cnblogs.com">cnblogs</a>
    14              </li>
    15          </ul>
    16     <body>
    17 </html>

       js代码

     1 var EventUtil = {
     2 
     3            addHandler:   function(element, type, handler){
     4                     if(element.addEventListener){
     5                         element.addEventListener(type, handler, false);   
     6                     }else if(element.attachEvent){
     7                         element.attachEvent("on" + type, handler);
     8                     }else{
     9                         element["on" + type] = handler;
    10                     }                    
    11             },
    12 
    13            getEvent: function(event){
    14                   return event?event: window.event; 
    15            },     
    16 
    17             getTarget: function(event){
    18                   return event.target|| event.srcElement; 
    19            },     
    20 
    21            preventDefault: function(event){
    22                    if(event.preventDefault){
    23                        event.preventDefault(); 
    24                    }else{
    25                        event.returnValue = false;
    26                    }
    27            },
    28 
    29            removeHandler: function(event){
    30                   if(element.removeEventListener){
    31                          element.removeEventListener(type, handler, false);
    32                   }
    33                   else if(element.detachEvent)
    34                   {
    35                      element.detachEvent("on" + type, handler);
    36                   }else{
    37                      element["on" + type] = null;
    38                   }
    39            },
    40 
    41            stopPropagation: function(event){
    42                    if(event.stopPropagation){
    43                        event.stopPropagation();
    44                    }else{                    
    45                        event.cancelBubble = true;         
    46                    }
    47            },
    48            
    49            getCharCode: function(event){
    50                 if(typeof event.charCode == "number"){
    51                      return event.charCode;
    52                 }else{
    53                      return event.keyCode;
    54                 }
    55            }
    56 }
     1 EventUtil.addHandler(window, "load", function(event){
     2 
     3      var div = document.getElementById("myDiv");
     4 
     5      EventUtil.addHandler(div, "contexmenu", function(event){
     6             event = EventUtil.getEvent(event);        
     7             EventUtil.preventDefault(event); 
     8             
     9             var menu = document.getElementById("myMenu");
    10             menu.style.left = event.clientX + "px";          
    11             menu.style.top = event.clientY + "px";
    12             menu.style.visibility = "visible"; 
    13     });
    14 
    15     EventUtil.addHandler(document, "click", function(event){
    16              document.getElementById("myMenu").style.visibility = "hidden";
    17     });
    18 })
  • 相关阅读:
    Sublime Text 试玩日记
    Makefile 学习
    小书匠使用手册
    较完整的解决Linux zip 压缩包中文我乱码问题
    彻底解决Android模拟器中文短信乱码问题
    博客变更
    关于如何学习一个框架的经验总结
    [JavaScript] this、call和apply详解
    类与类之间关系,用C#和JavaScript体现
    [Node.js] require背后的故事
  • 原文地址:https://www.cnblogs.com/yiliweichinasoft/p/3684366.html
Copyright © 2011-2022 走看看