遨游下oncontextmenu事件问题教程
我要把右键菜单屏蔽,然后右键的时候触发自己的事件。
obj.oncontextmenu = function(){alert("")};
在IE及FF下都没有问题,但是在遨游下,就是不行,这个要怎么解决呢?
先谢谢了~~
教程网
(containers, options) {
this._setOptions(options);
.options;
opt.menu;
opt.css;
opt.hover;
opt.active;
opt.tag;
opt.html;
opt.relContainer;
opt.relative;
opt.attribute;
opt.property;
opt.onBeforeShow;
;
//修正自定义容器
(o, i){
//自定义容器 id:定位元素 menu:插入菜单元素
var pos, menu;
if ( o.id ) {
pos o.menu : pos;
} else {
pos o;
};
pos $$(menu);
//容器对象 pos:定位元素 menu:插入菜单元素
: menu } );
}, this);
//初始化程序
this._iniMenu();
};
FixedMenu.prototype = {
//设置默认属性
_setOptions: function(options) {
};
$$.extend( {} );
},
//程序初始化
_iniMenu: function() {
},
//根据自定义菜单对象生成程序菜单对象
_buildMenu: function() {
//清除旧菜单dom(包括自定义的)
(o){
o._elem;
if ( elem ) {
//防止dom内存泄漏
, o._event );
elem.parentNode.removeChild(elem);
o._elem ;
};
});
//设置菜单默认值
{
id:
tag: this.tag,
css: this.css,
hover: this.hover,
active: this.active,
html: this.html,
relContainer: !!this.relContainer,
relative: this.relative,
attribute: this.attribute,
property: this.property
};
//先定义"0"顶级菜单
: [] } };
//整理自定义菜单并插入到程序菜单对象
(o) {
//生成菜单对象(由于包含对象,要用深度扩展)
{} );
//去掉相同id菜单,同时排除了id为"0"的菜单
; };
//重置属性
;
menu;
}, this);
//建立树形结构
( o, id, menus ) {
._menus[o.parent];
//父级菜单不存在或者父级是自己的话,当成一级菜单
]; };
//插入到父级菜单对象的_children中
parent._children.push(o);
});
//整理菜单对象
(o) {
//如果有自定义元素的话先放到碎片文档中
._frag.appendChild(o.elem);
//修正样式,优先使用自定义元素的class
o.elem.className ) {
o.css = o.elem.className;
} ; };
o.css; };
o.hover; };
//对菜单对象的_children集合排序(先按rank再按id排序)
y.id; });
});
},
//插入菜单
_insertMenu: function(index, parent) {
._containers[index];
//如果是同一个父级菜单不用重复插入
; };
container._parent = parent;
//把原有容器内菜单移到碎片对象中
);
//重置子菜单对象集合
container._menus = [];
//把从父级菜单元素的子菜单对象集合获取的元素插入到容器
( menu, i ){
}, this);
},
//检查菜单
_checkMenu: function(menu, index) {
//索引保存到菜单对象属性中,方便调用
menu._index = index;
//如果菜单对象没有元素
menu._elem ) {
menu.elem;
//如果没有自定义元素的话创建一个
menu.html; };
//设置property
$$.extend( elem, menu.property );
//设置attribute
menu.attribute;
attribute) { elem.setAttribute( att, attribute[att] ); };
//设置样式
elem.className = menu.css;
//设置事件
, menu._event );
//保存到菜单对象
menu._elem = elem;
};
},
//触发菜单
_hoverMenu: function(e, menu) {
menu._elem;
//如果是内部元素触发直接返回
; };
clearTimeout(this._timerMenu);
//可能在多个容器间移动,所以全部容器都重新设置样式
(o, i){
; };
this._resetCss(o);
//设置当前菜单为active样式
o._active;
menu.active; };
});
//设置当前菜单为触发样式
menu.hover; };
//触发显示菜单
.delay );
},
//显示菜单
_showMenu: function(menu) {
menu._children.length;
//隐藏不需要的容器
._hideContainer(o); } );
//重置当前容器_active
;
//如果有子级菜单
if ( child ) {
//设置当前容器_active
container._active = menu;
//显示下一级容器
};
//重置当前容器的css
this._resetCss(container);
//设置当前菜单样式
menu.active : menu.hover;
},
//初始化容器(索引, 容器元素)
_iniContainer: function(index, container) {
container.pos;
//重置属性
this._resetContainer(container);
//添加事件
));
$$E.addEvent(oContainer, (e){
//先判断是否移出到所有容器之外
e.relatedTarget,
isOut ($$D.contains(o.pos, elem)); });
if ( isOut ) {
//清除定时器并隐藏
._timerMenu);
.delay );
};
}, this));
//除了第一个容器外设置浮动样式
if ( index ) {
$$D.setStyle(container.pos, {
position: ,
zIndex:
});
};
//ie6处理select
if ( $$B.ie6 ) {
);
document.body.insertBefore(iframe, document.body.childNodes[0]);
container._iframe = iframe;
};
//记录索引,方便调用
container._index = index;
//插入到容器集合
container;
},
//检查容器
_checkContainer: function(index) {
._containers[index] ) {
//如果容器不存在,根据前一个容器复制成新容器,第一个容器必须自定义
].pos
//用了新的添加事件方式,没有ie的cloneNode的bug
), pre );
//清除id防止冲突
;
//初始化容器
: container } );
};
},
//显示容器
_showContainer: function(menu) {
menu._index
,container ].pos
,elem ._containers[index].pos : menu._elem
,pos = RelativePosition( elem, container, menu.relative );
//执行显示前事件
this.onBeforeShow(container, menu);
//定位并显示容器
$$D.setStyle(container, {
left: pos.Left
});
//ie6处理select
if ( $$B.ie6 ) {
$$D.setStyle(]._iframe, {
width: container.offsetWidth ,
height: container.offsetHeight ,
left: pos.Left ,
display: ""
});
};
},
//隐藏容器
_hideContainer: function(container) {
//设置隐藏
} );
//重置上一个菜单的触发菜单对象
;
//ie6处理select
; };
},
//重置容器对象属性
_resetContainer: function(container) {
container._active
},
//隐藏菜单
hide: function() {
(o, i){
) {
//如果是第一个重设样式和_active
this._resetCss(o);
}
this._hideContainer(o);
};
});
},
//重设容器菜单样式
_resetCss: function(container) {
$$A.forEach( container._menus, );
},
//历遍菜单对象集合
_forEachMenu: function(callback) {
._menus ); };
},
//历遍容器对象集合
_forEachContainer: function(callback) {
$$A.forEach( );
},
//添加自定义菜单
add: function(menu) {
._custommenu.concat(menu);
this._iniMenu();
},
//修改自定义菜单
edit: function(menu) {
$$A.forEach( $$A.isArray( menu ) (o){
//如果对应id的菜单存在
._menus[o.id] ) {
//从自定义菜单中找出对应菜单,并修改
(m, i){
o.id ) {
;
};
;
//用every可以跳出循环
}, this );
};
}, this );
this._iniMenu();
},
//删除自定义菜单
del: function() {
Array.prototype.slice.call(arguments);
(o){
;
});
this._iniMenu();
}
};