码迷,mamicode.com
首页 > 其他好文 > 详细

自定义右键菜单,禁用浏览器自带的右键菜单[右键菜单实现--Demo]

时间:2014-11-24 19:02:20      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   io   ar   color   os   使用   

许多从事Web开发的会发现有些事,我们需要禁用浏览器本事自带的右键菜单,而实现自定义的右键菜单 下面我们也来实现一个自定义的右键菜单

bubuko.com,布布扣

首先来创建JSP页面

 
 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
 2 <html>
 3 <head>
 4 <title>右键菜单</title>
 5 <script src="js/jquery.min.js"></script>
 6 </head>
 7 <link rel="stylesheet" type="text/css" href="css/demo.css">
 8 <link rel="stylesheet" type="text/css" href="css/context.standalone.css">
 9 <script src="js/context.js"></script>
10 <script src="js/demo.js"></script>
11 <body>
12     <div style="text-align:center;margin:50px 0; font:normal 14px/24px ‘MicroSoft YaHei‘;"></div>
13 </body>
14 </html>
 

这里来控制一个文本区域内浏览器自带的右键菜单禁用,使用自定义菜单

 
  1 /**
  2  *@ trimmer Visec·Dana
  3  *@ time 2014-7-23
  4  **/
  5 var context = context || (function () {
  6     var options = {
  7         fadeSpeed: 100,
  8         filter: function ($obj) {
  9         },
 10         above: auto,
 11         preventDoubleContext: true,
 12         compress: false
 13     };
 14 
 15     function initialize(opts){
 16         options = $.extend({}, options, opts);
 17         $(document).on(click‘, html, function () {
 18             $(.dropdown-context).fadeOut(options.fadeSpeed, function(){
 19                 $(.dropdown-context‘).css({display:‘‘}).find(.drop-left‘).removeClass(drop-left);
 20             });
 21         });
 22         if(options.preventDoubleContext){
 23             $(document).on(contextmenu‘, .dropdown-context, function (e) {
 24                 e.preventDefault();
 25             });
 26         }
 27         $(document).on(mouseenter‘, .dropdown-submenu, function(){
 28             var $sub = $(this).find(.dropdown-context-sub:first),
 29                 subWidth = $sub.width(),
 30                 subLeft = $sub.offset().left,
 31                 collision = (subWidth+subLeft) > window.innerWidth;
 32             if(collision){
 33                 $sub.addClass(drop-left);
 34             }
 35         });
 36         
 37     }
 38 
 39     function updateOptions(opts){
 40         options = $.extend({}, options, opts);
 41     }
 42 
 43     function buildMenu(data, id, subMenu){
 44         var subClass = (subMenu) ?  dropdown-context-sub‘ : ‘‘,
 45             compressed = options.compress ?  compressed-context‘ : ‘‘,
 46             $menu = $(<ul class="dropdown-menu dropdown-context‘ + subClass + compressed+" id="dropdown-‘ + id + "></ul>);
 47         var i = 0, linkTarget = ‘‘;
 48         for(i; i<data.length; i++){
 49             if (typeof data[i].divider !== undefined){
 50                 $menu.append(<li class="divider"></li>);
 51             } else if (typeof data[i].header !== undefined){
 52                 $menu.append(<li class="nav-header">‘ + data[i].header + </li>);
 53             } else {
 54                 if (typeof data[i].href == undefined){
 55                     data[i].href = #;
 56                 }
 57                 if (typeof data[i].target !== undefined){
 58                     linkTarget =  target="‘+data[i].target+";
 59                 }
 60                 if (typeof data[i].subMenu !== undefined){
 61                     $sub = (<li class="dropdown-submenu"><a tabindex="-1" href="‘ + data[i].href + ">‘ + data[i].text + </a></li>);
 62                 }else{
 63                     $sub = $(<li><a tabindex="-1" href="‘ + data[i].href + "‘+linkTarget+>‘ + data[i].text + </a></li>);
 64                 }
 65                 if (typeof data[i].action !== undefined){
 66                     var actiond = new Date(),
 67                         actionID = event-‘ + actiond.getTime() * Math.floor(Math.random()*100000),
 68                         eventAction = data[i].action;
 69                     $sub.find(a‘).attr(id, actionID);
 70                     $(#‘ + actionID).addClass(context-event);
 71                     $(document).on(click‘, #‘ + actionID, eventAction);
 72                 }
 73                 $menu.append($sub);
 74                 if (typeof data[i].subMenu != undefined){
 75                     var subMenuData = buildMenu(data[i].subMenu, id, true);
 76                     $menu.find(li:last).append(subMenuData);
 77                 }
 78             }
 79             if (typeof options.filter == function) {
 80                 options.filter($menu.find(li:last));
 81             }
 82         }
 83         return $menu;
 84     }
 85     function addContext(selector, data){
 86         var d = new Date(),
 87             id = d.getTime(),
 88             $menu = buildMenu(data, id);
 89         $(body).append($menu);
 90         $(document).on(contextmenu, selector, function (e){
 91             e.preventDefault();
 92             e.stopPropagation();
 93             $(.dropdown-context:not(.dropdown-context-sub)).hide();
 94             $dd = $(#dropdown-‘ + id);
 95             if (typeof options.above == boolean‘ && options.above) {
 96                 $dd.addClass(dropdown-context-up).css({
 97                     top: e.pageY - 20 - $(#dropdown-‘ + id).height(),
 98                     left: e.pageX - 13
 99                 }).fadeIn(options.fadeSpeed); 
100             } else if (typeof options.above == string‘ && options.above == auto){
101                 $dd.removeClass(dropdown-context-up);
102                 var autoH = $dd.height() + 12;
103                 if ((e.pageY + autoH) > $(html).height()){
104                     $dd.addClass(dropdown-context-up).css({
105                         top: e.pageY - 20 - autoH,
106                         left: e.pageX - 13
107                     }).fadeIn(options.fadeSpeed);
108                 } else {
109                     $dd.css({ 
110                         top: e.pageY + 10,  
111                         left: e.pageX - 13
112                     }).fadeIn(options.fadeSpeed); 
113                 }
114             }
115         });
116     }
117     function destroyContext(selector) {
118         $(document).off(contextmenu‘, selector).off(click‘, .context-event);
119     }
120     return {
121         init: initialize,
122         settings: updateOptions,
123         attach: addContext,
124         destroy: destroyContext
125     };
126 })();
 

context.js主要来编写自定义右键菜单对应的功能连接 下面的demo.js则是菜单的编辑与显示的样式

 
 1 /**
 2  * @trimmer Visec·Dana
 3  * @time 2014-7-23
 4  */
 5 $(document).ready(function(){
 6     /**
 7      * 右键菜单信息
 8      * text 文本内容
 9      * href 链接地址?
10      */
11     context.settings({compress: true});   //字体属性大小
12     context.attach(html,[
13         {header: 菜单栏},
14         {divider: true},      //控制实线
15         {text: 后退‘, href: #},
16         {text: 前进‘, href: #},
17         {divider: true},
18         {text: 菜单信息1‘, href: #},
19         {text: 菜单信息1‘, href: #},
20         {text: 菜单信息1‘, href: #},
21         {text: 菜单信息1‘, href: #},
22         {divider: true},
23         {text: 菜单信息1‘, href: #},
24         {divider: true},
25         {text: 禁用自定义菜单, action: function(e){
26             e.preventDefault();
27             context.destroy(html);
28             alert(确定要禁用吗?);
29         }},
30     ]);
31     context.init({preventDoubleContext: false});  //单击左键关闭右键菜单
32 });
 

这里是我编写的一个Demo的文件结构图,还有一些CSS文件信息代码,我就不贴了,文件已共享!

bubuko.com,布布扣

 

Demo下载:http://yunpan.cn/Q7BVXNGXdSvYB  访问密码 04d9

自定义右键菜单,禁用浏览器自带的右键菜单[右键菜单实现--Demo]

标签:des   style   blog   http   io   ar   color   os   使用   

原文地址:http://www.cnblogs.com/jameslif/p/4119296.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!