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

資訊專(zhuān)欄INFORMATION COLUMN

前端事件綁定知識(shí)點(diǎn)(面試常考)

wizChen / 2762人閱讀

摘要:事件通常與函數(shù)配合使用,當(dāng)事件發(fā)生時(shí)函數(shù)才會(huì)執(zhí)行。的事件流是事件捕獲流,事件由根元素獲取并沿樹(shù)向下分發(fā)。通過(guò)添加事件,只能用刪除此事件。這主要得益于瀏覽器的事件冒泡機(jī)制。

簡(jiǎn)介

事件是可以被 JavaScript 偵測(cè)到的行為。

網(wǎng)頁(yè)中的每個(gè)元素都可以產(chǎn)生某些可以觸發(fā) JavaScript 函數(shù)或程序的事件。

事件通常與函數(shù)配合使用,當(dāng)事件發(fā)生時(shí)函數(shù)才會(huì)執(zhí)行。

執(zhí)行JS 事件的方式:

HTML 事件屬性可以直接執(zhí)行 JavaScript 代碼

HTML 事件屬性可以調(diào)用 JavaScript 函數(shù)

你可以為 HTML 元素指定自己的事件處理程序

你可以阻止事件的發(fā)生。

等等 ...

常用的JS事件 type
鼠標(biāo)單擊事件 onclick
鼠標(biāo)經(jīng)過(guò)事件 onmouseover
鼠標(biāo)移開(kāi)事件 onmouseout
聚焦事件 onfocus
失焦事件 onblur
加載事件 onload
刷新頁(yè)面 onunload(貌似只對(duì)IE有效)
關(guān)閉頁(yè)面 onbeforeunload(貌似只對(duì)IE有效)

事件流

事件流描述的是從頁(yè)面中接受事件的順序。

IE 的事件流是事件冒泡流,事件由子元素獲取并沿DOM樹(shù)向上傳播。即事件最開(kāi)始由最具體的元素(文檔中嵌套層次最深的那個(gè)節(jié)點(diǎn))接收,然后逐級(jí)向上轉(zhuǎn)播至最不具體的節(jié)點(diǎn)(document),用 stopPropagation() 方法終止冒泡。

Netscape 的事件流是事件捕獲流,事件由根元素獲取并沿DOM樹(shù)向下分發(fā)。與事件冒泡流相反,事件捕獲的思想是不太具體的節(jié)點(diǎn)(document)應(yīng)該更早接收到事件,而最具體的節(jié)點(diǎn)最后接收到事件。已經(jīng)不適用了

Event 對(duì)象

HTML DOM Event 對(duì)象

header 1 header 2
事件 event
事件目標(biāo) event.target
添加事件 element.addEventListener(type, listener, false)
移除事件 element.removeEventListener(type, listener, false)
阻止事件冒泡 event.stopPropagation()
取消默認(rèn)行為 event.preventDefault()

IE 中的 Event 對(duì)象

header 1 header 2
事件 window.event
事件目標(biāo) event.srcElement
添加事件 element.attachEvent("on" + type, listener)
移除事件 element.detachEvent("on" + type, listener)
阻止事件冒泡 event.cancelBubble = true
取消默認(rèn)行為 event.returnValue = false
事件處理程序

HTML 事件處理程序

事件直接寫(xiě)在html的元素里面,缺點(diǎn):html和js代碼緊密的耦合在一起。

測(cè)試

0級(jí) DOM事件處理程序

把一個(gè)函數(shù)賦值給一個(gè)事件的處理程序?qū)傩裕瑑?yōu)點(diǎn):比較簡(jiǎn)單,跨瀏覽器支持。缺點(diǎn):不能添加多個(gè)事件處理程序,最后一個(gè)事件會(huì)覆蓋前面的事件

document.getElementById("id").onclick = function () {
    alert(1);
}

2級(jí) DOM事件處理程序

通過(guò) addeventlistener() 添加事件,只能用 removeEventlistener() 刪除此事件。它們都接收三個(gè)參數(shù):要處理的事件名event(不加"on")、作為事件處理程序的函數(shù)function(優(yōu)點(diǎn):可以添加多個(gè)事件處理程序,)和一個(gè)布爾值useCapture。布爾參數(shù)僅僅在現(xiàn)代瀏覽器最近的幾個(gè)版本中是可加可不加的,并且true代表該事件在捕獲階段執(zhí)行,false代表在冒泡階段執(zhí)行,建議寫(xiě)false,因?yàn)橛行g覽器只有冒泡階段。

target.addEventListener(type, listener[, useCapture]);
target.removeEventListener(type, listener[, useCapture]);

IE 事件處理程序

IE8 及更早IE版本不支持 addEventListener() 方法,Opera 7.0 及 Opera 更早版本也不支持。 但是,對(duì)于這些不支持該函數(shù)的瀏覽器,你可以使用 attachEvent() 方法來(lái)添加事件句柄。通過(guò) attachEvent() 添加事件,只能用 detachEvent() 刪除此事件。這兩個(gè)方法接收相同的兩個(gè)參數(shù):事件處理程序名稱(chēng) type 與事件處理函數(shù) function,不支持第三個(gè)參數(shù)的原因:IE8--只支持冒泡冒泡流。

element.attachEvent(type, function)
element.detachEvent(type, function)
事件代理和委托

當(dāng)我們需要對(duì)很多元素添加事件的時(shí)候,可以通過(guò)將事件添加到它們的父節(jié)點(diǎn)而將事件委托給父節(jié)點(diǎn)來(lái)觸發(fā)處理函數(shù)。這主要得益于瀏覽器的事件冒泡機(jī)制。

Lorem ipsum dolor sit amet.

Lorem ipsum dolor sit amet.

Lorem ipsum dolor sit amet.

跨瀏覽器兼容的事件處理程序(能力檢測(cè))
/*
 * @Author: bxm09
 * @Date:   2017-03-24 15:51:37
 * @Last Modified by:   bxm09
 * @Last Modified time: 2017-07-24 13:16:04
 * @Desc 跨瀏覽器兼容的事件處理程序(能力檢測(cè))
 */

var eventshiv = {
    // event兼容
    getEvent: function(event) {
        return event ? event : window.event;
    },

    // type兼容
    getType: function(event) {
        return event.type;
    },

    // target兼容
    getTarget: function(event) {
        return event.target ? event.target : event.srcelem;
    },

    /**
     * 添加事件句柄
     * 2級(jí) DOM -> IE -> 0級(jí) DOM
     */
    addHandler: function(elem, type, listener) {
        if (elem.addEventListener) {
            elem.addEventListener(type, listener, false);
        } else if (elem.attachEvent) {
            elem.attachEvent("on" + type, listener);
        } else {
            // 在這里由于.與"on"字符串不能鏈接,只能用 []
            elem["on" + type] = listener;
        }
    },

    // 移除事件句柄
    removeHandler: function(elem, type, listener) {
        if (elem.removeEventListener) {
            elem.removeEventListener(type, listener, false);
        } else if (elem.detachEvent) {
            elem.detachEvent("on" + type, listener);
        } else {
            elem["on" + type] = null;
        }
    },

    /**
     * 添加事件代理
     */
    addAgent: function (elem, type, agent, listener) {
        elem.addEventListener(type, function (e) {
            if (e.target.matches(agent)) {
                listener.call(e.target, e); // this 指向 e.target
            }
        });
    },

    /**
     * 取消默認(rèn)行為
     * 非IE -> IE
     */
    preventDefault: function(event) {
        if (event.preventDefault) {
            event.preventDefault();
        } else {
            event.returnValue = false;
        }
    },

    /**
     * 阻止事件冒泡
     * 非IE -> IE
     */
    stopPropagation: function(event) {
        if (event.stopPropagation) {
            event.stopPropagation();
        } else {
            event.cancelBubble = true;
        }
    }
};

console.log("eventshiv.js 文件加載成功!");

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

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

相關(guān)文章

  • 前端事件綁定識(shí)點(diǎn)面試常考

    摘要:事件通常與函數(shù)配合使用,當(dāng)事件發(fā)生時(shí)函數(shù)才會(huì)執(zhí)行。的事件流是事件捕獲流,事件由根元素獲取并沿樹(shù)向下分發(fā)。通過(guò)添加事件,只能用刪除此事件。這主要得益于瀏覽器的事件冒泡機(jī)制。 簡(jiǎn)介 事件是可以被 JavaScript 偵測(cè)到的行為。 網(wǎng)頁(yè)中的每個(gè)元素都可以產(chǎn)生某些可以觸發(fā) JavaScript 函數(shù)或程序的事件。 事件通常與函數(shù)配合使用,當(dāng)事件發(fā)生時(shí)函數(shù)才會(huì)執(zhí)行。 執(zhí)行JS 事件的方式: ...

    liujs 評(píng)論0 收藏0
  • 前端面試常考識(shí)點(diǎn)---js

    摘要:上面實(shí)現(xiàn)了遞歸調(diào)用,這樣做的好處是在前一個(gè)定時(shí)器代碼執(zhí)行完成之前,不會(huì)向隊(duì)列插入新的定時(shí)代碼,確保不會(huì)有任何的缺失間隔。而且,它保證在下一次定時(shí)器代碼執(zhí)行之前,至少要等待指定的時(shí)間間隔。 1.同步和異步 詳細(xì)~文章總結(jié): setTimeout(fn,ms)這個(gè)函數(shù),是經(jīng)過(guò)指定時(shí)間后,把要執(zhí)行的任務(wù)加入到Event Queue中,又因?yàn)槭菃尉€(xiàn)程任務(wù)要一個(gè)一個(gè)執(zhí)行,如果前面的任務(wù)需要的時(shí)間...

    BingqiChen 評(píng)論0 收藏0
  • 前端面試常考識(shí)點(diǎn)---CSS

    摘要:在布局規(guī)則中提到計(jì)算的高度時(shí),浮動(dòng)元素也參與計(jì)算。因此,父元素在計(jì)算其高度時(shí),加入了浮動(dòng)元素的高度,順便達(dá)成了清除浮動(dòng)的目標(biāo),所以父元素就包裹住了子元素。 前端面試常考知識(shí)點(diǎn)---js 1.CSS3的新特性有哪些 點(diǎn)我查看 CSS3選擇器 . CSS3邊框與圓角 CSS3圓角border-radius:屬性值由兩個(gè)參數(shù)值構(gòu)成: value1 / value2,值之間用/分隔,v...

    騫諱護(hù) 評(píng)論0 收藏0
  • PHP面試常考內(nèi)容之Memcache和Redis(1)

    摘要:以下正文的部分內(nèi)容來(lái)自程序員面試筆試寶典書(shū)籍,如果轉(zhuǎn)載請(qǐng)保留出處一什么是是一個(gè)開(kāi)源免費(fèi)高性能的分布式對(duì)象緩存系統(tǒng),它基于一個(gè)存儲(chǔ)鍵值對(duì)的來(lái)存儲(chǔ)數(shù)據(jù)到內(nèi)存中。預(yù)告面試常考內(nèi)容之和將于本周三更新。 你好,是我琉憶。繼上周(2019.2-11至2-15)發(fā)布的PHP面試常考內(nèi)容之面向?qū)ο髮?zhuān)題后,發(fā)布的第二個(gè)專(zhuān)題,感謝你的閱讀。本周(2019.2-18至2-22)的文章內(nèi)容點(diǎn)為以下幾點(diǎn),更新時(shí)...

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

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

0條評(píng)論

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