var buttonMap = { 
1:1, 
4:2, 
2:3 
} 
dom.fixEvent = function(event){ 
if ( event[ "expando" ] ) { 
return event; 
} 
var originalEvent = event 
event = dom.Event(originalEvent); 
for(var prop in originalEvent){ 
if(typeof originalEvent[prop] !== "function"){ 
event[prop] = originalEvent[prop] 
} 
} 
//如果不存在target属性,为它添加一个 
if ( !event.target ) { 
event.target = event.srcElement || document; 
} 
//如果事件源对象为文本节点,则置入其父元素 
if ( event.target.nodeType === 3 ) { 
event.target = event.target.parentNode; 
} 
//如果不存在relatedTarget属性,为它添加一个 
if ( !event.relatedTarget && event.fromElement ) { 
event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; 
} 
//如果不存在pageX/Y则结合clientX/Y做一双出来 
if ( event.pageX == null && event.clientX != null ) { 
var doc = document.documentElement, body = document.body; 
event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); 
event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); 
} 
// 为键盘事件添加which事件 
if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) { 
event.which = event.charCode || event.keyCode; 
} 
// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) 
if ( !event.metaKey && event.ctrlKey ) { 
event.metaKey = event.ctrlKey; 
} 
// 判定鼠标事件按下的是哪个键,1 === left; 2 === middle; 3 === right 
if ( !event.which && event.button !== undefined ) { 
event.which = buttonMap[event.button] 
} 
return event; 
} 
毫不犹豫地抄jQuery的方法,因为在所有类库中,jQuery的方法是最好提取的。
现在我们基本解决了文章中段提出的两个问题中的其中一个。要解决第一个我们就需要引入缓存系统了。这个留在下一部分讲。
  [Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]
您可能感兴趣的文章:
