扩展jQuery右键默认事件
来源:互联网 发布:himall2.6 源码 编辑:程序博客网 时间:2024/06/04 07:07
(function($){ //隐藏作用域 避免和$冲突$.event.rightclickDisabled = $([]); //禁用列表//定义特殊事件对象$.event.special.rightclick = { eventType : 'rightclick', //定义事件类型 /* data namespaces */ setup:function(data,namespaces){ //当在一个元素上添加某种事件类型的第一个事件时,setup会被调用一次 $(this).addClass('right-clickable'). //this 指向目标元素 bind('contextmenu',$.event.special.rightclick.handler); }, //销毁 right click event teardown:function(namespaces){ $(this).removeClass('right-clickable'). unbind('contextmenu',$.event.special.rightclick.handler); }, //内部事件处理器 /* return false 继续默认行为 */ handler:function(event){ if($.event.rightclickDisabled.length && $(this).is($.event.rightclickDisabled)){ //如果元素被禁用该事件 event.stopPropagation(); event.preventDefault(); } event.type = $.event.special.rightclick.eventType; return $.event.dispatch.apply(this,arguments); //调用用户处理器 } };$.event.special.rightmulticlick = { eventType : 'rightmulticlick', setup : function(data,namespaces){ $(this).addClass('right-clickable'); }, add: function(handleObj){ var data = $.extend({clickCount: 2, clickNumber: 0,lastClick:0,clickSpeed: 500, handler:handleObj.handler},handleobj.data || {}); var id = $.event.special.rightmulticlick.eventType + handleObj.guid; $(this).data(id,data).bind('contextmenu.'+ id,{id:id},$.event.special.rightmulticlick.handler) }, remove :function(handleObj){ var id= $.event.special.rightmulticlick.eventType + handleObj.guid; $(this).removeData(id).unbind('contextmenu.'+id); }, teardown : function(namespaces){ $(this).removeClass('right-clickable'); }, handler :function(event){ if($.event.rightclickDisabled.length && $(this).is($.event.rightclickDisabled)){ event.stopPropagation(); event.preventDefault(); return; } var data = $(this).data(event.data.id); event.timeStamp = event.timeStamp || new Date().getTime(); if(event.timeStamp - data.lastClick <= data.clickSpeed){ data.clickNumber++; }else{ data.clickNumber = 1; data.lastClick = event.timeStamp; } var result = false; if(data.clickNumber == data.clickCount){ event.type = $.event.special.rightmulticlick.eventType; result = data.handler.apply(this,arguments); } return result; } };$.each([$.event.special.rightclick.eventType,$.event.special.rightmulticlick.eventType],function(i,eventType){ $.fn[eventType] = function(data,fn){ if(fn == null){ fn = data; data = null; } return arguments.length > 0 ? this.on(eventType,null,data,fn) : this.trigger(eventType); };}); })(jQuery)
调用示例
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><meta http-equiv="charset" content="utf-8"><title>jQuery 右键 Right-click Event</title><link type="text/css" href="../common/demo.css" rel="stylesheet"><style type="text/css">.rightClickTarget { width: 12em; margin-left: 15em; padding: 1em 3em; border: 1px solid #3c8243; text-align: center; }.right-clickable { background-color: #ddffe8; cursor: url(rightclick.png), pointer; }</style><link type="text/css" href="http://code.jquery.com/ui/1.8.13/themes/smoothness/jquery-ui.css" ><script src="http://code.jquery.com/jquery-1.8.3.js" integrity="sha256-dW19+sSjW7V1Q/Z3KD1saC6NcE5TUIhLJzJbrdKzxKc=" crossorigin="anonymous"></script> <script src="http://code.jquery.com/ui/1.8.23/jquery-ui.js" integrity="sha256-lFA8dPmfmR4AQorTbla7C2W0aborhztLt0IQFLAVBTQ=" crossorigin="anonymous"></script> <script type="text/javascript" src="jquery.rightclick.js"></script> </head><body> <h1>jQuery 右键事件event</h1> <div id="tabs"> <ul> <li><a href="#basics">右键 right-click</a></li> </ul> <div id="basics" class="feature"> <h2>right click</h2> <p></p> <p> <span class="demoLabel">Right-click:</span> <label><input type="checkbox" id="defaultAction" />允许右键默认的动作</label> </p> <p> <span class="demoLabel"> </span> <button type="button" id="triggerRightClick">触发事件(Trigger)</button> <button type="button" id="unbindRightClick">Unbind</button> </p> <div id="defaultRightClick" class="rightClickTarget"> 这里右键 </div> <script> $(function(){ onRightClick(); }); $('#triggerRightClick').click(function(){ $('#defaultRightClick').trigger('rightclick'); }); $('#unbindRightClick').click(function(){ var bind = $(this).text() == 'Bind'; $(this).text(bind ? 'Unbind' : 'Bind'); if(bind){ onRightClick(); }else{ $('#defaultRightClick').off('rightclick'); } }); function onRightClick(){ $('#defaultRightClick').on('rightclick',function(event){ alert('事件类型:'+ event.type); return $('#defaultAction').is(':checked'); }) } </script> </div> <div id="multi" class="feature"></div> </div> </body>
阅读全文
0 0
- 扩展jQuery右键默认事件
- jquery事件机制扩展插件 jquery鼠标右键事件
- jquery事件机制扩展插件 jquery鼠标右键事件
- jquery注册右键事件
- jquery禁止鼠标右键事件
- jQuery事件扩展机制
- 取消鼠标右键默认事件contextmenu
- 取消鼠标右键默认事件contextmenu
- jquery 禁止鼠标右键并监听右键事件
- jquery 中 注册鼠标右键单击事件
- jquery 中 注册鼠标右键单击事件
- jquery-smartMenu 鼠标右键点击事件
- jQuery自定义元素右键点击事件
- jQuery自定义元素右键点击事件
- jquery与浏览默认事件
- jquery组织默认行为事件
- jQuery的"特别事件"扩展
- js屏蔽鼠标右键默认事件以实现自定义菜单
- TOJ 1048: 简易版最长序列
- 一句话理解复杂语法
- kali 更新修改源 安装中文输入法
- Android 模块化完整方案实现
- 四层和七层负载均衡的区别
- 扩展jQuery右键默认事件
- clion之解决Clion License Activation问题
- Python的数组
- 实验一 搜索算法问题求解
- 登录plsql Developer会出现Could not initalize oci.dll警告
- c++入门笔记(10)运算符
- oracle存储过程
- 如何设计数据库(1)?
- TOJ 1055: 简单密码破解