document.write('
解析:
varEventUtil = (function() {
var EventUtil, // 事件处理对象
 eventList = [], // 事件列表
 // 浏览器兼容的鼠标滚动事件 type
 mouseWheelType = typeof window.opera !== "object"&& !/
(Khtml|AppleWebKit|Konqueror)/.test(navigator.userAgent) &&
/Gecko/.test(navigator.userAgent) ? "DOMMouseScroll":
"mousewheel", // 鼠标滚动事件 type 正则
 mouseWheelRegExp = /^mousewheel|DOMMouseScroll$/;
 // 事件详细信息构造器
 function EventDetail(element, type, handler, proxy) {
 this.element = element;
 this.type = type;
 this.handler = handler;
 this.proxy = proxy;
 }
 // 将事件对象处理成 DOM 标准的事件对象
 function eventObjHandler(event, element) {
 event = event || window.event;
 if(!event.target) {
 event.target = event.srcElement;
 }
 if(event.cancelable === undefined) {
 event.cancelable = true;
 }
 if(!event.preventDefault) {
 event.preventDefault = function() {
 event.returnValue = false;
 };
 }
 if(event.bubbles === undefined) {
 event.bubbles = true;
 }
 if(!event.stopPropagation) {
 event.stopPropagation = function() {
 event.cancelBubble = true;
 };
 }
 if(!event.currentTarget) {
 event.currentTarget = element;
 }
 if(!event.eventPhase) {
 event.eventPhase = event.target === event.
 currentTarget ? 2: 3; 
}
 if(mouseWheelRegExp.test(event.type) && !event.
 wheelDelta) {
 event.wheelDelta = -event.detail * 40;
 }
 return event;
 }
 // 创建 handler 的代理函数,用于修正 this 引用
 function createProxyFunc(ele, type, handler) {
 var proxy = function(event) {
 handler.call(ele, eventObjHandler(event, ele));
 };
 eventList.push(newEventDetail(ele, type, handler,
 proxy));
 return proxy;
 }
 // 从 eventList 中找出真正绑定到事件中的处理函数,并删除相应的
EventDetail
 function findTheTrueEventHandler(ele, type, handler) {
 var i, eventDetail;
 for(i = eventList.length - 1; i >= 0; i--) {
 eventDetail = eventList[i];
 if(eventDetail.element === ele && eventDetail.
 type === type && eventDetail.handler === handler) {
 break;
 }
 }
 if(i > -1) {
 handler = eventList[i].proxy; eventList.
 splice(i, 1);
 }
 return handler;
 }
 // 修正鼠标滚轮事件名
 function repairMouseWheel(type) {
 return mouseWheelRegExp.test(type) ? mouseWheelType :
 type;
 }
 EventUtil = {
 // 添加事件绑定
 add: function(ele, type, handler) {
type = repairMouseWheel(type); // 修正 type
 if(ele.addEventListener) { // 标准
 ele.addEventListener(type,
 type === "DOMMouseScroll"?
 createProxyFunc(ele, type, handler) : handler, false);
 } else if(ele.attachEvent) { //IE
 ele.attachEvent("on"+ type,
 createProxyFunc(ele, type, handler));
 } else{ //DOM1
 ele["on"+ type] = function(event) {
 handler.call(ele, eventObjHandler(event));
 };
 }
 },
 // 移除事件绑定
 remove: function(ele, type, handler) {
 type = repairMouseWheel(type); // 修正 type
 if(ele.removeEventListener) { // 标准
 ele.removeEventListener(type,
 type === "DOMMouseScroll"?
 findTheTrueEventHandler(ele, type, handler) :
 handler, false);
 } else if(ele.detachEvent) { //IE
 ele.detachEvent("on"+ type,
 findTheTrueEventHandler(ele, type, handler));
 } else{ //DOM1
 ele["on"+ type] = null;
 }
 }
};
// 绑定页面关闭事件,当页面关闭时移除所有事件
EventUtil.add(window, "unload", function() {
 var i, eventDetail;
 for(i = eventList.length - 1; i >= 0; i--) {
 eventDetail = eventList[i];
 if(eventDetail.type === "DOMMouseScroll") {
 eventDetail.element.removeEventListener
 (eventDetail.type, eventDetail.proxy, false);
 } else{
 eventDetail.element.detachEvent("on"+
 eventDetail.type, eventDetail.proxy, false); 
}
 eventList[i] = null;
 }
 eventList = [];
 });
 return EventUtil;

})(); 

');