《JavaScript進階程式設計》閱讀筆記(十八):跨平台的事件

來源:互聯網
上載者:User
跨平台的事件EventUtil對象

  EventUtil:

var EventUtil={    addEventHandler:function(oTarget, sEventType, fnHandler){        if(oTarget.addEventListener){            oTarget.addEventListener(sEventType,fnHandler,false);        } else if(oTarget.attachEvent){            oTarget.attachEvent("on"+sEventType,fnHandler);        } else{            oTarget["on"+sEventType]=fnHandler;        }    },    removeEventHandler:function(oTarget, sEventType, fnHandler){        if(oTarget.removeEventListener){            oTarget.removeEventListener(sEventType,fnHandler);        } else if(oTarget.detachEvent){            oTarget.detachEvent("on"+sEventType,fnHandler);        } else{            oTarget["on"+sEventType]=null;        }    },    formatEvent:function(oEvent){        var isIE=/msie/i.test(navigator.userAgent),            isWin=/win/i.test(navigator.userAgent);        if(isIE && isWin){            oEvent.charCode=(oEvent.type == "keypress")?oEvent.keyCode:0;            oEvent.eventPhase =2;            oEvent.isChar=(oEvent.charCode>0);            oEvent.pageX=oEvent.clientX+document.body.scrollLeft;            oEvent.pageY=oEvent.clientY+document.body.scrollTop;            oEvent.preventDefault=function(){                this.returnvalue=false;            }            if(oEvent.type == "mouseout"){                oEvent.relateTarget=oEvent.toElement;            }else if(oEvent.type=="mouseover"){                oEvent.relatedTarget=oEvent.fromElement;            }            oEvent.stopPropagation=function(){                this.cancelBubble=true;            }            oEvent.target=oEvent.srcElement;            oEvent.time=(new Date()).getTime();        }        return oEvent;    },    getEvent:function(){        if(window.event){            return this.formatEvent(window.event);        }else{            return EventUtil.getEvent.caller.arguments[0];        }    }}
測試
<!DOCTYPE html><html><head>    <title>Demo</title>    <meta charset="utf-8"/>    <script>        var EventUtil={            addEventHandler:function(oTarget, sEventType, fnHandler){                if(oTarget.addEventListener){                    oTarget.addEventListener(sEventType,fnHandler,false);                } else if(oTarget.attachEvent){                    oTarget.attachEvent("on"+sEventType,fnHandler);                } else{                    oTarget["on"+sEventType]=fnHandler;                }            },            removeEventHandler:function(oTarget, sEventType, fnHandler){                if(oTarget.removeEventListener){                    oTarget.removeEventListener(sEventType,fnHandler);                } else if(oTarget.detachEvent){                    oTarget.detachEvent("on"+sEventType,fnHandler);                } else{                    oTarget["on"+sEventType]=null;                }            },            formatEvent:function(oEvent){                var isIE=/msie/i.test(navigator.userAgent),                    isWin=/win/i.test(navigator.userAgent);                if(isIE && isWin){                    oEvent.charCode=(oEvent.type == "keypress")?oEvent.keyCode:0;                    oEvent.eventPhase =2;                    oEvent.isChar=(oEvent.charCode>0);                    oEvent.pageX=oEvent.clientX+document.body.scrollLeft;                    oEvent.pageY=oEvent.clientY+document.body.scrollTop;                    oEvent.preventDefault=function(){                        this.returnvalue=false;                    }                    if(oEvent.type == "mouseout"){                        oEvent.relateTarget=oEvent.toElement;                    }else if(oEvent.type=="mouseover"){                        oEvent.relatedTarget=oEvent.fromElement;                    }                    oEvent.stopPropagation=function(){                        this.cancelBubble=true;                    }                    oEvent.target=oEvent.srcElement;                    oEvent.time=(new Date()).getTime();                }                return oEvent;            },            getEvent:function(){                if(window.event){                    return this.formatEvent(window.event);                }else{                    return EventUtil.getEvent.caller.arguments[0];                }            }        }        EventUtil.addEventHandler(window,"load",function(){            var oDiv=document.getElementById("div1");            EventUtil.addEventHandler(oDiv,"mouseover",handleEvent);            EventUtil.addEventHandler(oDiv,"mouseout",handleEvent);            EventUtil.addEventHandler(oDiv,"mousedown",handleEvent);            EventUtil.addEventHandler(oDiv,"mouseup",handleEvent);            EventUtil.addEventHandler(oDiv,"click",handleEvent);            EventUtil.addEventHandler(oDiv,"dblclick",handleEvent);        });        function handleEvent(){            var oEvent=EventUtil.getEvent();            var oTextbox=document.getElementById("txt1");            oTextbox.value+="\n>"+oEvent.type;            oTextbox.value+="\n    target is "+oEvent.target.tagName;            if(oEvent.relatedTarget){                oTextbox.value+="\n    relateTarget is "+oEvent.relatedTarget.tagName;            }        }    </script></head><body>    <p>Use your mouse to click and double click the red square.</p>    <div id="div1" style="width:100px;height:100px;background:red;">Test</div>    <p><textarea id="txt1" rows="15" cols="50"></textarea></p></body></html>

Use your mouse to click and double click the red square.

Test 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.