国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

javascript的事件

ZweiZhao / 1887人閱讀

摘要:所謂事件呢,就是可以被偵測(cè)到的行為。事件傳播的順序?qū)?yīng)瀏覽器的兩種事件流模型捕獲型事件流和冒泡型事件流。

去年一直在學(xué)習(xí)框架的東西,比如VueJs,angularJs的東西,但感覺(jué)自己的基礎(chǔ)知識(shí)還是很匱乏,因此想著該重新回歸本質(zhì),多看看原生javascrip的東西,現(xiàn)在返回去學(xué)一些東西,感覺(jué)很多都豁然開(kāi)朗的感覺(jué)。

所謂事件呢,就是可以被 JavaScript 偵測(cè)到的行為。而具體的事件有哪些呢

鼠標(biāo)事件

鍵盤事件

window事件

media事件

form事件

當(dāng)觸發(fā)事件時(shí),就需要去處理他,而使用事件處理模型有三種

html事件處理模型----定義:將事件直接綁定到html標(biāo)簽上----缺點(diǎn):html和javascript耦合,無(wú)法處理多個(gè)事件程序


. DOM0級(jí)事件處理模型----定義:函數(shù)賦值給事件處理程序的方法

var btn=document.getElementById("btn");

 btn.onclick=function(){

 console.log("這是通過(guò)DOM 2級(jí)處理程序")

};

. DOM 2級(jí)事件處理程序----通過(guò)addEventListener 和 removeEventListener,這兩個(gè)函數(shù)的參數(shù)要一致

function showMsg(){
console.log("msg")
}
btn.addEventListener("click", showMsg, false)
btn.removeEventListener("click", showMsg, false)

IE事件處理
IE8以下的版本不支持addEventListener
因此需要用attachEvent 添加事件處理程序

       detachEvent 刪除事件處理程序    
       

而事件發(fā)生時(shí)會(huì)在元素節(jié)點(diǎn)與根節(jié)點(diǎn)之間按照特定的順序傳播,路徑所經(jīng)過(guò)的所有節(jié)點(diǎn)都會(huì)收到該事件,這個(gè)傳播過(guò)程即DOM事件流。

事件傳播的順序?qū)?yīng)瀏覽器的兩種事件流模型:捕獲型事件流和冒泡型事件流。

事件捕獲:不太具體的DOM節(jié)點(diǎn),具體節(jié)點(diǎn)接收到事件

事件冒泡:由具體的DOM節(jié)點(diǎn)逐級(jí)向上傳遞至最不具體的節(jié)點(diǎn)

網(wǎng)上的圖片更形象的表明了

    

當(dāng)我們點(diǎn)擊son的時(shí)候,控制臺(tái)會(huì)先后打出

som msg
father msg

可是我們只想顯示son msg,應(yīng)該怎么處理呢 ,接著往下看

DOM中的事件對(duì)象

在觸發(fā)DOM上的事件時(shí)都會(huì)產(chǎn)生一個(gè)對(duì)象 
DOM中的 event事件對(duì)象
     type:事件類型,
     target:獲取事件目標(biāo)元素
     stopPropagation:方法 阻止事件冒泡
     preventDefault 方法 阻止事件的默認(rèn)行為
IE中的事件對(duì)象
    type:事件類型
    srcElement 屬性 獲取事件目標(biāo)元素
    cancleBubble 屬性
    returnValue 屬性 設(shè)置為true

通過(guò)以上知識(shí),我們可以封裝一個(gè)跨瀏覽器的事件對(duì)象

    var eventObj= {
         /**
         * 添加事件 
         * element 元素
         * 事件類型
         * 事件處理
         **/
        addEventHandler: function (element, type, handler) {
            if (element.addEventListener) {
                element.addEventListener(type, handler, false)
            } else if (element.attachEvent) {
                element.attachEvent("on" + type, handler)
            } else {
                element["on" + type] = handler;
            }
        },
        /**
        * 移除事件
        * element 元素
        * 事件類型
        * 事件處理
        **/
        removeEventHandler: function (element, type, handler) {
            if (element.removeEventListener) {
                element.removeEventListener(type, handler)
            } else if (element.attachEvent) {
                element.attachEvent("on" + type, handler)
            } else {
                element["on" + type] = null;
            }
        },
        /**
        *獲取事件
        **/
        getEvent: function (e) {
            return e ? e : window.event;
        },
        /**
        * 阻止默認(rèn)行為
        **/
        preventDefault: function (e) {
            if (e.preventDefault) {
                e.preventDefault()
            } else {
                e.returnValue = false;
            }
        },
        getElement: function (e) {
            return e.target || e.srcElement;
        },
        /** 
        * 阻止事件冒泡
        **/
        stopPropagation: function (e) {
            if (e.stopPropagation) {
                e.stopPropagation()
            } else {
                e.cancelBubble = true;
            }

        }
    };
    eventUtil.addHandler(btn2, "click", showMessage);

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/82372.html

相關(guān)文章

  • 瀏覽器下 Event Loop

    摘要:前言是以單線程的形式運(yùn)行在宿主環(huán)境下,采用了回調(diào)的形式來(lái)解決異步任務(wù)。線程中步就是在瀏覽器下的。 前言 javascript 是以單線程的形式運(yùn)行在宿主環(huán)境下,javascript 采用了回調(diào)的形式來(lái)解決異步任務(wù)。 為什么是單線程? javascript 的最開(kāi)始的出現(xiàn)是為了給 web 頁(yè)面增添一些動(dòng)態(tài)的效果,那么就避免不了獲取頁(yè)面上的元素信息,如果 javascript 是以多線程的...

    forrest23 評(píng)論0 收藏0
  • 什么是JavaScript 事件循環(huán) ?

    摘要:此事件隊(duì)列的美妙之處在于它只是函數(shù)等待被調(diào)用和移動(dòng)到調(diào)用棧的一個(gè)臨時(shí)存放區(qū)域。在事件循環(huán)不斷監(jiān)視調(diào)用棧是否為空現(xiàn)在確實(shí)是空的時(shí)候調(diào)用創(chuàng)建一個(gè)新的調(diào)用棧來(lái)執(zhí)行代碼。在執(zhí)行完之后進(jìn)入了一個(gè)新的狀態(tài)這個(gè)狀態(tài)調(diào)用棧為空事件記錄表為空事件隊(duì)列也為空。 這篇文章是對(duì)個(gè)人認(rèn)為講解 JavaScript 事件循環(huán)比較清楚的一篇英文文章的簡(jiǎn)單翻譯,原文地址是http://altitudelabs.com...

    tracymac7 評(píng)論0 收藏0
  • JavaScript 瀏覽器事件解析

    摘要:原文瀏覽器事件之間的關(guān)系程序采用了異步事件驅(qū)動(dòng)編程模型,維基百科對(duì)它的解釋是事件驅(qū)動(dòng)程序設(shè)計(jì)英語(yǔ)是一種電腦程序設(shè)計(jì)模型。 原文:https://keelii.github.io/2016/09/29/javascript-browser-event/ JavaScript、瀏覽器、事件之間的關(guān)系 JavaScript 程序采用了異步事件驅(qū)動(dòng)編程(Event-driven program...

    spacewander 評(píng)論0 收藏0
  • JavaScript高級(jí)程序設(shè)計(jì)》學(xué)習(xí)筆記:JavaScript事件流和事件處理程序

    摘要:可以使用偵聽(tīng)器或處理程序來(lái)預(yù)訂事件,以便事件發(fā)生時(shí)執(zhí)行相應(yīng)的代碼。響應(yīng)某個(gè)事件的函數(shù)稱為事件處理程序或事件偵聽(tīng)器。可以刪除通過(guò)級(jí)方法指定的事件處理程序。 JavaScript和HTML之間的交互是通過(guò)事件實(shí)現(xiàn)的。 事件:文檔或?yàn)g覽器窗口中發(fā)生的一些特定的交互瞬間。 可以使用偵聽(tīng)器(或處理程序來(lái)預(yù)訂事件),以便事件發(fā)生時(shí)執(zhí)行相應(yīng)的代碼。 1. 事件流 事件流:從頁(yè)面中接收事件的順序。 ...

    Rocko 評(píng)論0 收藏0
  • 【譯】JavaScript面試問(wèn)題:事件委托和this

    摘要:主題來(lái)自于的典型面試問(wèn)題列表。有多種方法來(lái)處理事件委托。這種方法的缺點(diǎn)是父容器的偵聽(tīng)器可能需要檢查事件來(lái)選擇正確的操作,而元素本身不會(huì)是一個(gè)監(jiān)聽(tīng)器。 showImg(http://fw008950-flywheel.netdna-ssl.com/wp-content/uploads/2014/11/Get-Hired-Fast-How-to-Job-Search-Classifieds...

    浠ラ箍 評(píng)論0 收藏0
  • 初窺JavaScript事件機(jī)制實(shí)現(xiàn)(一)—— Node.js事件驅(qū)動(dòng)實(shí)現(xiàn)概覽

    摘要:如果當(dāng)前沒(méi)有事件也沒(méi)有定時(shí)器事件,則返回。相關(guān)資料關(guān)于的架構(gòu)及設(shè)計(jì)思路的事件討論了使用線程池異步運(yùn)行代碼。下一篇初窺事件機(jī)制的實(shí)現(xiàn)二中定時(shí)器的實(shí)現(xiàn) 在瀏覽器中,事件作為一個(gè)極為重要的機(jī)制,給予JavaScript響應(yīng)用戶操作與DOM變化的能力;在Node.js中,事件驅(qū)動(dòng)模型則是其高并發(fā)能力的基礎(chǔ)。 學(xué)習(xí)JavaScript也需要了解它的運(yùn)行平臺(tái),為了更好的理解JavaScript的事...

    lavor 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<