前天做了关于右键屏蔽的一点小东西,想到现在大家都在做平台,都会有右键菜单,于是也抽空写了一个玩玩~
- /*
- *@Description: 右键弹出菜单插件
- *@Param obj: 触发菜单区域
- *@Param menu: 菜单对象
- *@Param offX: 偏移x值
- *@Param offX: 偏移y值
- *@Author: sev7n(2010-11-03)
- *@Update:
- */
- var rightMenu = function(options){
- var defaults = {
- obj:document, menu:“#context-menu”, offX:5, offY:5
- },
- options = $.extend({},defaults,options);
- this.options = options;
- this.options.obj = $(this.options.obj);
- this.options.menu = $(this.options.menu);
- this.init();
- };
- // 初始
- rightMenu.prototype.init = function() {
- var that = this,
- $obj = that.options.obj,
- $menu = that.options.menu;
- // 屏蔽右键
- $obj.bind(“contextmenu”,function(){
- return false;
- });
- // 右键触发菜单弹出
- $obj.mousedown(function(evt){
- evt = evt || window.event;
- if (evt.button === 2 ) {
- that.mouseCoords(evt);
- } else {
- $menu.hide();
- }
- });
- }
- // 点击坐标
- rightMenu.prototype.mouseCoords = function(evt) {
- var that = this,
- coord = {};
- if(evt.pageX || evt.pageY){
- coord = {x:evt.pageX, y:evt.pageY};
- } else {
- coord = {x:evt.clientX, y:evt.clientY + document.body.scrollTop};
- }
- that.rightMenuOut(coord);
- }
- // 菜单弹出
- rightMenu.prototype.rightMenuOut = function(coord) {
- var that = this,
- opts = that.options,
- $menu = opts.menu,
- $window = $(window),
- _menuW = $menu.outerWidth(),
- _menuH = $menu.outerHeight(),
- _winW = $window.width(),
- _winH = $window.height() + document.body.scrollTop,
- _cX = coord.x,
- _cY = coord.y;
- // 靠近边框判断
- _cX = (_menuW + _cX + opts.offX) < _winW ? (_cX + opts.offX) : (_cX - _menuW - opts.offX);
- _cY = (_menuH + _cY + opts.offY) < _winH ? (_cY + opts.offY) : (_cY - _menuH - opts.offY);
- $menu.css({‘left’:_cX, ’top’:_cY}).fadeIn(200).mousedown(function(){
- // 屏蔽菜单上的点击
- return false;
- });
- }
调用方法:
- new rightMenu({obj:document, menu:“#context-menu”, offX:10, offY:5});
代码很简单:
- 绑定contextmenu屏蔽右键
- 获取右键点击坐标
- 判断菜单是否距离窗口,如果挨着窗口改变位置
- 显示菜单,屏蔽菜单点击事件
PS:文件编码不一致会导致IE6下JS报 outside of function、Syntax error 等错误,第二次遇到了,警告下自己。
再PS:图片背景用了CSS3的background-size:cover;在低版本浏览器中背景会有问题 但右键菜单功能无碍~
热烈欢迎各种提BUG及代码改进建议~
之前也做了个右键菜单玩,没用jq,1:1克隆Chrome右键菜单:http://minus.com/lPYmghqwYPq8O
用bookmarklet实现了审查元素(firebug lite),Google翻译等功能。刚刚实现了比较完美的淡入,过了没2天,还没来得及实现连续点右键的淡入和二级菜单呢,Chrome就突然无耻的升级到15,把菜单样子改成了现在的Windows风格,瞬间失去了克隆欲望= =
哈哈 学习下~
// progress
var $progBar = $(‘#prog-bar’),
$proP = $(‘#prog-p’);
if ($.browser.webkit && !$.browser.safari) {
$progBar.animate({‘value’: 100}, 800);
} else {
$progBar.hide();
$proP.animate({‘width’: ’100%’}, 800);
}
顶部的加载条原来是“骗“人的….
O(∩_∩)O ~~