天天看點

js小東西

如何擷取event事件?

    事件對象需要作為參數傳入事件。

    function fn(event){

        console.log(event)

    }

    或者

    function(){

        console.log(arguments[0])

    }

    缺德定律再現!

    IE中:          window.event

    正常浏覽器中:    對象.on事件 = function(event){}

 相容方式:

    function fn(eve){

        var e = eve || window.event;

    }

檢測按下的滑鼠按鍵:event.button

    傳回值為0,左鍵;傳回值為1,中鍵;傳回值為2,右鍵

    檢測相對于浏覽器的位置:clientX和clientY

    當滑鼠事件發生時,滑鼠相對于浏覽器左上角的位置

    檢測相對于文檔的位置:pageX和pageY

    當滑鼠事件發生時,滑鼠相對于文檔左上角的位置。(IE7/8無)(類似于event.clientX和event.clientY)

    檢測相對于螢幕的位置:screenX和screenY

    當滑鼠事件發生時,滑鼠相對于螢幕左上角的位置

    檢測相對于事件源的位置:offsetX和offsetY

    當滑鼠事件發生時,滑鼠相對于事件發生元素左上角的位置

.鍵盤事件(keyup/keydown/keypress)

    鍵盤事件:

        onkeydown      鍵盤按下

        onkeyup        鍵盤擡起

        onkeypress     按下并擡起數字字母按鍵

得知按下的鍵盤上的哪個鍵:keyCode

event.keyCode        傳回目前按鍵的ASCII碼

        空格    32

        回車    13

        左      37

        上      38

        右      39

        下      40

    相容問題:  var eve = eve || window.event

              var keyC = eve.keyCode || eve.which

    案例:通過鍵盤上下左右,控制頁面中的元素位置移動

    ctrlKey        判斷ctrl是否被按下,按下傳回true

    shiftKey       判斷shift是否被按下,按下傳回true

    altKey         判斷alt是否被按下,按下傳回true

oncontextmenu    滑鼠右鍵事件

如何阻止預設事件?

    e.preventDefault();

    window.event.returnValue = false;

處理相容方式

    if( e.preventDefault ){

        e.preventDefault();

    }else{

        window.event.returnValue = false;

    }

.滑鼠拖拽效果(onmousedown/onmousemove/onmouseup)

 拖拽分解:

        按下滑鼠 ----> 移動滑鼠 ----> 松開滑鼠

    1.給目标元素添加onmousedown事件,拖拽的前提是在目标元素按下滑鼠左鍵

    2.當onmousedown發生以後,此刻給document添加onmousemove事件,意味着此刻滑鼠在網頁的移動都将改變目标元素的位置

    3.在onmousemove事件中,設定目标元素的left和top,

    公式

    目标元素的left = 滑鼠的clientX – (滑鼠和元素的橫坐标差,即offsetX)

    目标元素的top = 滑鼠的clientY– (滑鼠和元素的縱坐标差,即offsetY)

    4.當onmousedown發生以後,此刻給document添加onmouseup事件,意味着此刻滑鼠在網頁的任意位置松開滑鼠,都會放棄拖拽的效果

    在onmouseup事件中,取消document的onmousemove事件即可。

 事件觸發階段主要由于事件流:DOM0級事件處理階段和DOM2級事件處理;

    DOM0級事件處理,是一種指派方式,是被所有浏覽器所支援的,簡單易懂容易操作;

        元素.onclick = function(){}

    DOM2級事件處理是所有DOM節點中的方法,可以重複綁定,但是浏覽器相容存在問題;

    非IE下:(這裡的事件名不帶on),第三個參數表示是在捕獲階段還是冒泡階段。可以重複綁定事件,執行順序按照綁定順序來執行。

    oDiv.addEventListener('click',fn,false);

    oDiv.removeEventListener('click',fn ,false);

    IE下:

    隻有冒泡階段,是以沒有第三個參數;(這裡的事件名需要加on)

    oDiv.attachEvent();

    oDiv.detachEvent() ;

冒泡:從下往上(從裡往外)

捕獲:從上往下(從外往内)

    相容問題解決:

1.封裝成對象的方式

    var EventUtil={

        addHandler:function(DOM,EventType,fn){

            if(DOM.addEventListener){

                DOM.addEventListener(EventType,fn,false);

            }else if(DOM.attachEvent){

                DOM.attachEvent('on'+EventType,fn)

            }else{

                DOM['on'+EventType]=fn

            }

        },

        removeHandler:function(DOM,EventType,fn){

            if(DOM.removeEventListener){

                DOM.removeEventListener(EventType,fn,false)

            }else if(DOM.detachEvent){

                DOM.detachEvent('on'+EventType,fn)

            }else{

                DOM['on'+EventType]=null;

            }

        }

    }