javascript中的事件對象和處理


  • 鍵盤事件的類型相對應(yīng)的操作 操作keyCode 不同于 操作charCode
  • this代表的上下文
  • 事件動作得到事件發(fā)起位置的相對坐標 與元素位置的相對坐標的不同
  • 重要的事情說三遍 IE 的事件對象和 W3C 的事件體系不同瓜晤,需要時時注意兼容性問題F枧ā浦旱!注意!能庆!

本節(jié)索引

  1. 事件對象 --事件函數(shù)
  2. 事件類型 (鼠標事件 + 鍵盤事件)
  3. event(作為參數(shù)傳遞)的屬性和方法
  4. 傳統(tǒng)事件的綁定
  5. W3C事件綁定

事件對象

  1. 事件對象:事件對象是事件處理函數(shù)通過參數(shù)傳遞的(事件對象可以是隱藏的參數(shù))

     document.onclick = function(){
         alert(arguments[0]);
     }
    
  2. 事件處理函數(shù)

     1. 對象.事件處理函數(shù) = function(evevt){}   event是可以隱藏的參數(shù)
     
     2. 事件處理函數(shù)(監(jiān)聽器) 事件類型 + 事件動作 onclick
     
     3. document.onclick = function(evevt) {}
    
  3. this上下文對象

    this代表當前綁定事件的函數(shù)施禾,this有上下文環(huán)境

基本事件處理函數(shù) 鼠標事件 + 鍵盤事件 + HTML事件

所有的事件處理函數(shù)都會都有兩個部分組成,on + 事件名稱

  1. 鼠標事件
事件處理函數(shù) 影響的元素 發(fā)生時間
click 頁面所有的元素都可能觸發(fā)該事件 用戶單擊對象時觸發(fā)
dblclick 鏈接、按鈕相味、表單對象 用戶雙擊主鼠標鍵
mousedown 鏈接拾积、按鈕殉挽、表單對象 當用戶按下了鼠標還未彈起時觸發(fā)
mouseup 鏈接、按鈕拓巧、表單對象 當用戶釋放鼠標按鈕時觸發(fā)
mouseover 鏈接 當鼠標移到鏈接時
mouseout 鏈接 當鼠標移出某個元素上方時觸發(fā)
mousemove 元素 當鼠標指針在元素上移動時觸發(fā)
  1. 鍵盤事件
事件處理函數(shù) 影響的元素 發(fā)生的時間
keydown 文檔斯碌、圖像、鏈接肛度、表單 當按鍵被按下時 如果按住不放,會重復(fù)觸發(fā)
keypress 文檔傻唾、圖像、鏈接承耿、表單 當用戶按下鍵盤上的字符鍵觸發(fā)如果按住不放,會重復(fù)觸發(fā)
keyup 文檔冠骄、圖像、鏈接加袋、表單 當用戶釋放鍵盤上的鍵觸發(fā)
  1. HTML事件
事件處理函數(shù) 影響的元素 發(fā)生的時間
load 主題凛辣、框架集、圖像 文檔或圖像加載后
unload 主題职烧、框架集扁誓、圖像 當頁面完全卸載后觸發(fā)
select 表單元素 當選擇一個表單對象時
change 輸入框,選擇框和文本區(qū)域 當改變一個元素的值且失去焦點時
focus 窗口、框架蚀之、所有表單對象 當單擊鼠標或者將鼠標移動聚焦到窗口或框架時
blur 窗口蝗敢、框架、所有表單對象 當焦點從對象上移開時
submit 表單 當發(fā)送表格到服務(wù)器時
reset 表單復(fù)位按鈕 單擊表單的 reset 按鈕
resize 窗口 當選擇一個表單對象時
scroll 窗體對象 當用戶滾動帶滾動條的元素時觸發(fā)
事件類型 (鼠標事件 + 鍵盤事件)

  1. 鼠標事件

    click 一般只有鼠標左鍵單擊時觸發(fā)

    mousedown/mouseup 會觸發(fā)button屬性

     button屬性的值
     e.button == 0 主鼠標鍵(左鍵)
     e.button == 1 鼠標中鍵
     e.button == 2 次鼠標鍵 (右鍵)
    
  2. 可視區(qū)域以及屏幕坐標(事件的坐標位置元素的坐標位置不同元素的坐標位置稍后講解

    event.clientX / event.clientY 表示事件發(fā)生位置相對于瀏覽器的坐標

    event.screen / event.screenY 表示事件相對于屏幕的坐標

  3. 鍵盤事件 單獨的鍵盤敲擊 / 組合鍵盤敲擊(shift/comment/ctrl)

    • 修改鍵事件屬性 得到 boolear 值

        e.shiftKey
        e.ctrlKey
        e.altKey
        e.metaKey    `判斷是否按下window / comment鍵`
      
    • 鍵盤事件的兩種類型的事件 操作鍵碼 / 操作字符編碼(ACSII編碼)

      1. keydown / keyup 得到鍵盤的鍵碼keyCode

         document.keyDown = function(e){
             console.log(e.keyCode);
         }
        
      2. keyPress 得到鍵盤的字符編碼charCode

         document.keyPress = function(){
             console.log(e.charCode);
         }
        

      可以使用 String.fromCharCode()將 ASCII 編碼轉(zhuǎn)換成實際的字符

    小寫字母a 對應(yīng)的鍵盤鍵碼 與 字符編碼

    鍵盤事件類型

event對象的事件和方法

事件冒泡 + 事件的默認行為 + 事件目標(target) + 事件的細節(jié)屬性

  • 事件冒泡

      e.bubbles               boolean     設(shè)置是否可以取消事件的冒泡行為
      
      e.stopPropagation()     方法(需要在 e.bubbles = true 時執(zhí)行)
              阻止事件冒泡行為的方法 
    
  • 事件默認行為

      e.cancelable            boolean     設(shè)置是否可以取消事件的默認行為
          
      e.preventDefault()      方法(需要在 e.cancellable = ture 時執(zhí)行)
              取消是事件的默認行為的方法
    
  • 事件目標 e.target

  • 時間的細節(jié)屬性

      e.detail            與事件相關(guān)的細節(jié)屬性
          
      e.type              事件類型
          
      e.currentTarget     DOM元素   事件處理函數(shù)中當前正在處理的元素
    
  • 事件冒泡的處理

    事件冒泡,是從里往外逐個觸發(fā)足删。事件捕獲,是從外往里逐個觸發(fā)寿谴。那么現(xiàn)代的瀏覽器 默認情況下都是冒泡模型

    skitch.png
傳統(tǒng)事件綁定 (已經(jīng)不建議使用)

  1. 傳統(tǒng)事件綁定一般應(yīng)用腳本模型 (講一個事件處理函數(shù)綁定到函數(shù)上)

     objectDOM.onclick = function(){
         alert('傳統(tǒng)事件綁定');
     }
    
  2. 腳本模型的諸多問題

    • 相同 事件類型名稱的 函數(shù)會被覆蓋 (相同類型名稱的事件后面的會將前面的事件覆蓋)

    • 事件切換執(zhí)行時的 this 傳值問題

        box.onclick = function () {
            toRed();
            toBlue.call(this);      // 必須將this傳遞到切換器中
        };
      
        function toRed() {
            this.className = 'red';
            this.onclick = toBlue;
        }
      
        function toBlue() {
            this.className = 'blue';
            this.onclick = toRed;
        }
      
W3C事件處理函數(shù)

1. DOM2 事件處理函數(shù)中包括 addEventListener() + removeEventListener() 兩個方法.
2. 所有的DOM節(jié)點中都包括這兩個方法。
3. 兩個方法都接受三個參數(shù)  
    事件名稱(標準的事件類型名稱)失受,
    處理函數(shù)讶泰,
    冒泡或者捕獲(true 表示捕獲,false表示冒泡) 
  1. 事件處理函數(shù)

    objectDOM.addEventListener(事件名贱纠,處理函數(shù)峻厚,冒泡或捕獲)

    objectDOM.removeEventListener(事件名,處理函數(shù)谆焊,冒泡或捕獲)

  2. W3C事件綁定的特點

    • 不需要自定義函數(shù)的切換

    • 可以屏蔽相同得到函數(shù)

        window.addEventListener('load',init,flase);    //第一次被執(zhí)行
        window.addEventListener('load',init,flase);    //第二次被屏蔽
        function init(){
            alert("W3C");
        }
      
    • 可以設(shè)置冒泡或者捕獲

    • 事件切換器 相當于JQuery中的事件的toggle()的方法

        window.addEventListener('load', function() { 
            var box = document.getElementById('box');
            box.addEventListener('click', function() {
                    alert('Lee');
                }, false);
            box.addEventListener('click', toBlue, false);
        }, false);
      
        function toRed() {
            this.className = 'red';
            // 在執(zhí)行切換事件之前需要移除原來的同名的事件
            this.removeEventListener('click', toRed, false); 
            this.addEventListener('click', toBlue, false);
        }
      
        function toBlue() {
            this.className = 'blue';
            this.removeEventListener('click', toBlue, false);               this.addEventListener('click', toRed, false);
        }
      
    • 冒泡和捕獲

        document.addEventListener('click', function () { 
            alert('document');
        }, true);               //布爾值 true 代表捕獲
        
        box.addEventListener('click', function () {
            alert('Lee'); 
        }, flase);              //布爾值為 flase 代表冒泡 
      
  3. W3C的鼠標移動事件

    鼠標移動時間的獲取 mouseover/mouserout

    • e.target 用于獲取當前正在操作的事件的對象

    • W3C 提供了一個屬性:relatedTarget 用于獲取從哪里移入和從哪里移出的 DOM 對象

        objectDOM.ommouseover = function(e) {
                e.relatedTarget     //獲取移入該DOM對象的上一個DOM對象
        }
        
        objectDOM.onmouserout = function(e){
            e.relatedTarget     //用于獲取移出 該 DOM 對象的下一個 DOM對象
        }
      
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惠桃,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子辖试,更是在濱河造成了極大的恐慌辜王,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件罐孝,死亡現(xiàn)場離奇詭異呐馆,居然都是意外死亡,警方通過查閱死者的電腦和手機莲兢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門汹来,熙熙樓的掌柜王于貴愁眉苦臉地迎上來续膳,“玉大人,你說我怎么就攤上這事收班》夭恚” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵摔桦,是天一觀的道長社付。 經(jīng)常有香客問我,道長邻耕,這世上最難降的妖魔是什么鸥咖? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮兄世,結(jié)果婚禮上啼辣,老公的妹妹穿的比我還像新娘。我一直安慰自己碘饼,他們只是感情好熙兔,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著艾恼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪麸锉。 梳的紋絲不亂的頭發(fā)上钠绍,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機與錄音花沉,去河邊找鬼柳爽。 笑死,一個胖子當著我的面吹牛碱屁,可吹牛的內(nèi)容都是我干的磷脯。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼娩脾,長吁一口氣:“原來是場噩夢啊……” “哼赵誓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起柿赊,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤俩功,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后碰声,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诡蜓,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年胰挑,在試婚紗的時候發(fā)現(xiàn)自己被綠了蔓罚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片椿肩。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖豺谈,靈堂內(nèi)的尸體忽然破棺而出覆旱,到底是詐尸還是另有隱情,我是刑警寧澤核无,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布扣唱,位于F島的核電站,受9級特大地震影響团南,放射性物質(zhì)發(fā)生泄漏噪沙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一吐根、第九天 我趴在偏房一處隱蔽的房頂上張望正歼。 院中可真熱鬧,春花似錦拷橘、人聲如沸局义。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萄唇。三九已至,卻和暖如春术幔,著一層夾襖步出監(jiān)牢的瞬間另萤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工诅挑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留四敞,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓拔妥,卻偏偏與公主長得像忿危,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子没龙,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 以下文章為轉(zhuǎn)載铺厨,對理解JavaScript中的事件處理機制很有幫助,淺顯易懂兜畸,特分享于此努释。 什么是事件? 事件(E...
    jxyjxy閱讀 3,023評論 1 10
  • 聲明:本文來源于http://www.webzsky.com/?p=731我只是在這里作為自己的學習筆記整理一下(...
    angryyan閱讀 6,951評論 1 6
  • 什么是事件: 我們可以簡單的把事件理解為瀏覽器的感知系統(tǒng)咬摇。比如說:他可以感覺到用戶是否點擊(click)了頁面伐蒂、鼠...
    張松1366閱讀 6,769評論 1 6
  • 我愛電影 2014年11月7日 22:10 最近卷起一股電影熱潮,特別想追憶以前的電影肛鹏,無論國內(nèi)外逸邦,經(jīng)典的崎弃,永遠不...
    小鹿風閱讀 150評論 0 0
  • 大四剛剛開學州丹,收到了洗發(fā)水的快遞短信。沒細看,帶著手機就去了申通點托修。到了之后跟以往取快遞一樣:給編碼访雪、念姓名缨伊、對手...
    芋頭_bfc6閱讀 153評論 0 0