`
edison87915
  • 浏览: 200103 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JQUERY_contextMenu_学习

 
阅读更多
[menuContext首页:http://www.trendskitchens.co.nz/jquery/contextmenu/]

contextMenu的js文件学习:
/*
*!!!!!![$(x).contextMenu(id,options)---便于称呼先暂时称:对元素x的一次绑定(x可能是一个元素集合)]
* 元素x称为绑定元素
*给元素添加右键菜单[步骤]
*1.基本框架[如menu,shadow的div框架]仅初始化一次[第一次给元素绑定时-即页面中第一次执$(xx).contextMenu(id,options)时]
*2.右键菜单环境/状态-每次对一个元素绑定时初始化一次[如:menuStyle,itemStyle],
* 并将环境压入栈hash,且将环境信息在栈中的序号及绑定元素及事件对象绑定到绑定元素的contextmenu事件(右键)上
*/
//匿名函数定义+执行
(function($) {
//trigger事件源/绑定菜单的元素
//currentTarget??????
var menu, shadow, trigger, content, hash, currentTarget;
var defaults = {
menuStyle: {
listStyle: 'none',
padding: '1px',
margin: '0px',
backgroundColor: '#eee',
border: '1px solid #999',
width: '70px'
},
itemStyle: {
margin: '0px',
color: '#567',
display: 'block',
cursor: 'default',
padding: '3px',
border: '1px solid #ddd',
backgroundColor: 'transparent'
},
itemHoverStyle: {
border: '1px solid #0a246a',
backgroundColor: '#b6bdd2'
},
eventPosX: 'pageX',
eventPosY: 'pageY',
shadow : true,
onContextMenu: null,
//填充菜单内容完毕-显示菜单及阴影之前执行onShowMenu方法[相当于过滤器]
onShowMenu: null
};
//prototype原型-->实例方法
$.fn.contextMenu = function(id, options) {
if (!menu) {                                      // Create singleton menu
menu = $('<div id="jqContextMenu"></div>')
   .hide()
   .css({position:'absolute', zIndex:'500'})
   .appendTo('body')
   .bind('click', function(e) {
e.stopPropagation();
   });
}
if (!shadow) {
shadow = $('<div></div>')
.css({backgroundColor:'#000',position:'absolute',opacity:0.2,zIndex:499})
.appendTo('body')
.hide();
}
hash = hash || [];
//压栈-意途-每次初始化-将右键菜单环境/状态压入栈中-立刻将"最新压入栈中的环境的序号"绑定到元素上
hash.push({
id : id,
//继承$.extend(dest,src,src,src)
menuStyle: $.extend({}, defaults.menuStyle, options.menuStyle || {}),
itemStyle: $.extend({}, defaults.itemStyle, options.itemStyle || {}),
itemHoverStyle: $.extend({}, defaults.itemHoverStyle, options.itemHoverStyle || {}),
bindings: options.bindings || {},
shadow: options.shadow || options.shadow === false ? options.shadow : defaults.shadow,
onContextMenu: options.onContextMenu || defaults.onContextMenu,
onShowMenu: options.onShowMenu || defaults.onShowMenu,
eventPosX: options.eventPosX || defaults.eventPosX,
eventPosY: options.eventPosY || defaults.eventPosY
});
var index = hash.length - 1;
//给绑定元素绑定contextmenu事件(右键)(绑定元素可以是元素集合)
$(this).bind('contextmenu', function(e) {
//alert(e.srcElement.innerHTML);//alert(e.srcElement);//事件源
// Check if onContextMenu() defined|||
//初始化时,options中onContextMenu方法的意途:有选择性的绑定右键菜单[可根据条件使onContextMenu方法返回false,以至于实现一部分绑定,而个别元素不绑定]
var bShowContext = (!!hash[index].onContextMenu) ? hash[index].onContextMenu(e) : true;
if (bShowContext) display(index, this, e);
return false;
});
return this;
};
//trigger--即事件源[即被绑定菜单的元素?]
function display(index, trigger, e) {
//根据环境在栈中的序号index,取出对应的菜单环境
var cur = hash[index];
//根据id获取并复制(连事件一并复制)事先在页面上布置的菜单div,中的列表ul元素
content = $('#'+cur.id).find('ul:first').clone(true);
//给复制出来的菜单内容-添加菜单样式、条目样式及hover效果
content.css(cur.menuStyle).find('li').css(cur.itemStyle).hover(
function() {
$(this).css(cur.itemHoverStyle);
},
function(){
$(this).css(cur.itemStyle);
}
).find('img').css({verticalAlign:'middle',paddingRight:'4px'});

//menu变量-单例-即页面上只会同一时间只会出现一个右键菜单(事先布置的菜单填充到menu[id=jqContextMenu的div]中)
menu.html(content);

// if there's an onShowMenu, run it now -- must run after content has been added
// if you try to alter the content variable before the menu.html(), IE6 has issues
// updating the content
//[判断栈中菜单环境是否设置了onShowMenu方法-实质是初始化时在参数options中是否设置了onShowMenu]相当于过滤器
if (!!cur.onShowMenu) menu = cur.onShowMenu(e, menu);
//each方法--此处没有第三个参数,且cur.bindings为对象[非数组],即此处循环处理的是cur.bingdings对象中的各成员/方法,
//因此function(id,func)中id即为cur.bindings对象的属性名/方法名,而func即为cur.bindings对象的属性值/方法定义
//很明显,初始化时,所设置的options中的bindings对象中存放的全是方法名以及方法定义
$.each(cur.bindings, function(id, func) {
//以menu为上下文,根据id搜寻元素[即给cur.bindings中指定的菜单项绑定事件],并绑定click事件
$('#'+id, menu).bind('click', function(e) {
hide();
//trigger为事件源,currentTarget???
func(trigger, currentTarget);
});
});

//menu.css({'left':e[cur.eventPosX],'top':e[cur.eventPosY]}).show();
//设置菜单的坐标并显示菜单
menu.css({'left':e[cur.eventPosX],'top':e[cur.eventPosY]}).slideDown('fast');
//设置菜单的阴影坐标并显示
if (cur.shadow) shadow.css({width:menu.width(),height:menu.height(),left:e.pageX+4,top:e.pageY+4}).show();
//每执行一次display,即显示一次右键菜单,给document绑定一次click事件
$(document).one('click', hide);
}

function hide() {
//menu.hide();
menu.slideUp(200);
shadow.hide();
}

//Apply defaults
//为jQuery类增加全局/类变量?-----用途??????
$.contextMenu = {
defaults : function(userDefaults) {
$.each(userDefaults, function(i, val) {
if (typeof val == 'object' && defaults[i]) {
$.extend(defaults[i], val);
}
else defaults[i] = val;
});
}
};
})(jQuery);
//等于$(document).ready(function(){})
$(function() {
$('div.contextMenu').hide();
});
分享到:
评论

相关推荐

    在vue项目中使用Jquery-contextmenu插件的步骤讲解

    在介绍如何在Vue项目中集成Jquery-contextmenu插件之前,首先需要了解Jquery-contextmenu是什么。Jquery-contextmenu是一个使用jQuery实现的右键菜单插件,它能够很便捷地为网页元素添加右键上下文菜单功能。Vue.js...

    前端项目-jquery.ui-contextmenu.zip

    通过学习和使用`jquery.ui-contextmenu`,前端开发者可以提高用户体验,为网页增添更多交互性和功能性。同时,这也是一种提升网页应用的专业性和复杂性的有效手段。在实际项目中,我们可以结合其他jQuery UI组件和...

    jquery插件ContextMenu设置右键菜单

    jQuery是一个快速、小巧、功能丰富的JavaScript库,使得客户端脚本编程更为便捷。它通过封装各种常用的功能为方法,简化了JavaScript编程...同时,文章也向初学者展示了如何通过实践来学习和掌握使用jQuery插件的方法。

    JQuery右键菜单插件ContextMenu使用指南

    在提供的示例中,引用了`jquery-1.2.6.min.js`和`jquery.contextmenu.r2.js`两个JavaScript文件。jQuery库是实现插件功能的基础,而`jquery.contextmenu.r2.js`则是插件的核心代码。 接下来,你可以通过jQuery选择...

    contextMenus:使用Jquery contextMenu生成右键菜单

    jQuery contextMenu是jQuery的一个插件,用于创建自定义的右键上下文菜单,提供了高度的定制性和便利性。这个插件极大地扩展了浏览器原生右键菜单的功能,使得开发者可以轻松地为网页元素添加个性化、功能丰富的右键...

    右键jQuery特效.rar_rulerzl2_which8cn_右键jQuery特效_电脑点击特效

    【jQuery特效】 jQuery是一种广泛应用于网页开发的JavaScript库,它极大地简化了JavaScript代码的编写,使得处理DOM(文档对象模型)...开发者可以借此学习如何使用jQuery创建交互式的用户界面,提升网站的用户体验。

    ContextMenu上下文菜单Demo

    上下文菜单(ContextMenu)是计算机用户界面中的一种常见元素,主要在用户点击右键时出现,提供与当前操作对象相关的...通过学习和实践这个Demo,开发者可以更好地掌握ContextMenu的使用技巧,并将其应用到自己的项目中。

    jQuery Context Menu - jQuery上下文菜单插件

    &lt;link rel="stylesheet" href="jquery.contextMenu.css"&gt; 右键点击我 &lt;script src="https://code.jquery.com/jquery-3.x.y.min.js"&gt;&lt;/script&gt; &lt;script src="jquery.contextMenu.js"&gt; $(function() { $('#...

    jQuery鼠标右键点击菜单代码.zip

    jQuery.contextmenu插件简化了这一实现过程,使得开发者能够快速地为网站添加这种交互性功能。 jQuery是一个轻量级、高性能的JavaScript库,它极大地简化了JavaScript的DOM操作、事件处理和动画效果。在jQuery中,...

    jquery右键菜单

    `jQuery.contextmenu.js`是核心插件脚本,它包含了创建和管理右键菜单的逻辑。当用户在页面元素上右击时,该插件会拦截默认的浏览器上下文菜单,然后显示自定义的菜单项。`jquery.contextmenu.css`则负责定义菜单的...

    jquery 右键菜单

    通过分析和学习这些文件,开发者可以更好地理解和应用jQuery右键菜单,为自己的网页添加类似的功能。 在实际应用中,jQuery右键菜单可以应用于各种场景,比如编辑器中的剪切、复制、粘贴操作,图像查看器中的保存...

    jQuery右键菜单

    除了手动编写代码实现,还可以使用现成的jQuery插件来快速构建右键菜单,例如`jQuery.contextMenu`。这个插件提供了丰富的配置选项和回调函数,可以轻松地创建复杂或简单的右键菜单。使用插件时,只需在HTML中添加...

    3种不同的ContextMenu右键演示

    学习和理解这三种ContextMenu的实现方式对于前端开发者来说非常有价值,因为它可以帮助他们更有效地创建用户友好的Web应用程序,提高用户体验。同时,掌握这些技术也有助于适应各种项目需求,无论是在桌面还是移动...

    JQueryEasyUI学习笔记(十一)源码

    在本篇jQuery EasyUI的学习笔记中,我们将深入探讨如何实现右键菜单以及冻结列的功能,这对于构建用户交互丰富的Web应用程序至关重要。jQuery EasyUI是一个基于jQuery的UI库,它提供了大量的预定义组件,使得开发者...

    jQuery全套打包下载

    这个“jQuery全套打包下载”包含了jQuery的核心库以及一系列常用的插件,是学习和开发过程中不可或缺的资源。 首先,jQuery核心库提供了一系列方便的DOM操作、事件处理、动画效果和Ajax交互的方法。例如,`$...

    JQUERY 右键菜单操作

    **jQuery 右键菜单操作详解** 在Web开发中,为用户提供直观且易用的交互体验是至关重要的。jQuery,作为一款强大的...学习并理解这段代码将有助于你掌握jQuery右键菜单的完整实现流程,从而在实际项目中灵活应用。

    jquery学习技巧 word 格式

    本文将深入探讨jQuery的一些实用学习技巧,帮助你更好地理解和掌握这个强大的工具。 1. **禁止右键点击** 在某些情况下,开发者可能希望禁用网页的右键点击,以防止用户进行某些操作。这可以通过监听`contextmenu`...

    【Jquery经典特效10】jQuery鼠标右键点击菜单代码

    而`Jquery特效资源分享.txt`则可能包含更多的jQuery特效和技巧,建议阅读以获取更多灵感和学习资料。 总结一下,通过使用jQuery的`contextmenu`事件和CSS定位,我们可以创建自定义的鼠标右键菜单。结合HTML结构和...

    jQuery权威指南-源代码

    对于初学者而言,本书应该是学习jQuery的首选。——jQuery中文用户组 jQuery因为易于使用和功能强大著称,是所有Web开发者应该掌握的一种利器,初学者如何才能快速而有效地掌握jQuery呢?最好的方法莫过于一边学习...

Global site tag (gtag.js) - Google Analytics