成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[面試專題]JS事件模型

lindroid / 794人閱讀

摘要:在這個(gè)事件發(fā)生期間,調(diào)用可阻止?jié)L動(dòng)當(dāng)手指從屏幕上移開時(shí)觸發(fā)。關(guān)于此事件的確切觸發(fā)事件,文檔中沒有明確說明。特定于事件目標(biāo)的對(duì)象的數(shù)組。

JS事件模型
事件模型以及周邊

事件捕獲

事件冒泡

事件觸發(fā)

移動(dòng)端事件模擬

事件委托

事件流 事件捕獲(event capturing)&事件冒泡(event bubbling)

給inner,out均綁定點(diǎn)擊事件.點(diǎn)擊inner,如果out先執(zhí)行,inner后執(zhí)行.則是事件捕獲.若inner先執(zhí)行.out后執(zhí)行則是事件冒泡.(這兩種模型來自于早期瀏覽器之爭)

W3C模型

先事件捕獲,到達(dá)目標(biāo)后再進(jìn)行冒泡

示例演示
out.addEventListener("click", (e) => {
   console.log("out clicked! ")
}, true)
inner.addEventListener("click", (e) => {
    console.log("inner clicked! ")
}, false)
document.addEventListener("click", (e) => {
    console.log("document clicked! ")
}, true)
點(diǎn)擊inner后,執(zhí)行順序:document clicked => out clicked => inner clicked
out.addEventListener("click", (e) => {
   console.log("out clicked! ")
}, true)
inner.addEventListener("click", (e) => {
    console.log("inner clicked! ")
}, false)
document.addEventListener("click", (e) => {
    console.log("document clicked! ")
}, false)
點(diǎn)擊inner后,執(zhí)行順序: out clicked => inner clicked => document clicked
事件模型 1.DOM0級(jí)事件(默認(rèn)發(fā)生在冒泡階段.只能綁定一個(gè)事件) 事件綁定
 ele.onclick = function (){
     //
 }
事件解除綁定
ele.onclick = null;
2.DOM2級(jí)事件(默認(rèn)發(fā)生在冒泡階段,由第三個(gè)參數(shù)決定,可綁定多個(gè)事件) 事件綁定
ele.addEventListener(eventType, handler, useCapture)//eventType不帶on,如click
//IE下用attachEvent
ele.attachEvent(eventType, handler);
事件解除綁定
ele.removeEventListener(eventType, handler, useCapture)
//IE下使用detachEvent
ele.detachEvent(eventType, handler);
事件對(duì)象 DOM事件模型中的事件對(duì)象常用屬性:

type用于獲取事件類型

target獲取事件目標(biāo)

stopPropagation()阻止事件冒泡

preventDefault()阻止事件默認(rèn)行為

IE事件模型中的事件對(duì)象常用屬性:

srcElement獲取事件目標(biāo)

cancelBubble阻止事件冒泡

returnValue阻止事件默認(rèn)行為

兼容處理
var eventUtil = {
    addEvent: function(ele, event, func, bool) {
        bool = bool || false;
        if (ele.addEventListener) {
            ele.addEventListener(event, func, bool)
        } else {
            ele.attachEvent("on" + event, func, bool);
        }
    },
    removeEvent: function(ele, event, func, bool) {
        bool = bool || false;
        if (ele.removeEventListener) {
            ele.removeEventListener(event, func, bool);
        } else {
            ele.detachEvent("on" + event, func, bool);
        }
    },
    getEvent: function(event) {
        return event || window.event;
    },
    getTarget: function(event) {
        return event.target || event.srcElement;
    },
    preventDefault:function (event) {
         if (event.preventDefault) {
            event.preventDefault();
         }else {
             event.returnValue = false;//IE
         }
    },
    stopPropagation:function  (event) {
         if (event.stopPropagation) {
            event.stopPropagation();
         } else {
             event.cancelBubble = true;//IE
         }
    }
};
移動(dòng)端事件 Touch事件

touchstart:當(dāng)手指觸摸屏幕時(shí)觸發(fā);即使已經(jīng)有一個(gè)手指放在了屏幕上也會(huì)觸發(fā)。
touchmove:當(dāng)手指在屏幕上滑動(dòng)時(shí)連續(xù)的觸發(fā)。在這個(gè)事件發(fā)生期間,調(diào)用preventDefault()可阻止?jié)L動(dòng)

touchend:當(dāng)手指從屏幕上移開時(shí)觸發(fā)。
touchcancel:當(dāng)系統(tǒng)停止跟蹤觸摸時(shí)觸發(fā)。關(guān)于此事件的確切觸發(fā)事件,文檔中沒有明確說明。
以上事件的event對(duì)象上面都存在如下屬性:
touches:表示當(dāng)前跟蹤的觸摸操作的Touch對(duì)象的數(shù)組。
targetTouches:特定于事件目標(biāo)的Touch對(duì)象的數(shù)組。
changeTouches:表示自上次觸摸以來發(fā)生了什么改變的Touch對(duì)象的數(shù)組。

每個(gè)Touch對(duì)象包含下列屬性:
identifier:表示觸摸的唯一ID。

clientX:觸摸目標(biāo)在視口中的X坐標(biāo)。
clientY:觸摸目標(biāo)在視口中的Y坐標(biāo)。
pageX:觸摸目標(biāo)在頁面中的x坐標(biāo)。
pageY:觸摸目標(biāo)在頁面中的y坐標(biāo)。
screenX:觸摸目標(biāo)在屏幕中的x坐標(biāo)。
screenY:觸摸目標(biāo)在屏幕中的y坐標(biāo)。
target:觸摸的DOM節(jié)點(diǎn)坐標(biāo)

觸發(fā)過程
touchstart =>touchmove =>touchend =>click(延遲300~200ms)

Tap事件封裝原理:利用touchstart =>touchmove =>touchen模擬click

HTMLElement.prototype.tap = function (handler,interval) {
     that = this
     this.isMove = false,
     this.startTime = 0,
     this.addEventListener("touchstart",function(e){
            startTime = Date.now();
        }),
     this.addEventListener("touchmove",function(e){
            isMove = true;
        }),
     this.addEventListener("touchend",function(e){
            if(!this.isMove && (Date.now()-startTime) < interval){
                handler();
            }
            this.isMove = false;
            this.startTime = 0;
        })
};
事件委托

把本應(yīng)綁定在自身的事件綁定到其他元素上來觸發(fā)即事件委托

//HTML
  • a
  • b
//JS var oUl = document.getElementById("ul"); oUl.onmouseover = function(ev){ var ev = ev || window.event; var target = ev.target || ev.srcElement; if((/li/i).test(target.nodeName)){ target.style.background = "red"; } } oUl.onmouseout = function(ev){ var ev = ev || window.event; var target = ev.target || ev.srcElement; if((/li/i).test(target.nodeName)){ target.style.background = ""; } } //JS

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/82112.html

相關(guān)文章

  • [面試專題]一線互聯(lián)網(wǎng)大廠面試總結(jié)

    摘要:道阻且長啊前端面試總結(jié)前端面試筆試面試騰訊一面瀏覽器工作原理瀏覽器的主要組件包括用戶界面包括地址欄后退前進(jìn)按鈕書簽?zāi)夸洖g覽器引擎用來查詢及操作渲染引擎的接口渲染引擎渲染界面和是基于兩種渲染引擎構(gòu)建的,使用自主研發(fā)的渲染引擎,和都使用網(wǎng)絡(luò)用來 道阻且長啊TAT(前端面試總結(jié)) 前端 面試 筆試 面試 騰訊一面 1.瀏覽器工作原理 瀏覽器的主要組件包括: 用戶界面- 包括地址欄、后退/前...

    lemanli 評(píng)論0 收藏0
  • [面試專題]一線互聯(lián)網(wǎng)大廠面試總結(jié)

    摘要:道阻且長啊前端面試總結(jié)前端面試筆試面試騰訊一面瀏覽器工作原理瀏覽器的主要組件包括用戶界面包括地址欄后退前進(jìn)按鈕書簽?zāi)夸洖g覽器引擎用來查詢及操作渲染引擎的接口渲染引擎渲染界面和是基于兩種渲染引擎構(gòu)建的,使用自主研發(fā)的渲染引擎,和都使用網(wǎng)絡(luò)用來 道阻且長啊TAT(前端面試總結(jié)) 前端 面試 筆試 面試 騰訊一面 1.瀏覽器工作原理 瀏覽器的主要組件包括: 用戶界面- 包括地址欄、后退/前...

    xfee 評(píng)論0 收藏0
  • [面試專題]一線互聯(lián)網(wǎng)大廠面試總結(jié)

    摘要:道阻且長啊前端面試總結(jié)前端面試筆試面試騰訊一面瀏覽器工作原理瀏覽器的主要組件包括用戶界面包括地址欄后退前進(jìn)按鈕書簽?zāi)夸洖g覽器引擎用來查詢及操作渲染引擎的接口渲染引擎渲染界面和是基于兩種渲染引擎構(gòu)建的,使用自主研發(fā)的渲染引擎,和都使用網(wǎng)絡(luò)用來 道阻且長啊TAT(前端面試總結(jié)) 前端 面試 筆試 面試 騰訊一面 1.瀏覽器工作原理 瀏覽器的主要組件包括: 用戶界面- 包括地址欄、后退/前...

    leap_frog 評(píng)論0 收藏0
  • [面試專題]JS異步原理(事件,隊(duì)列)

    摘要:全部代碼是一個(gè)先執(zhí)行一個(gè)執(zhí)行過程中遇到等異步操作則創(chuàng)建一個(gè)遇到等創(chuàng)建一個(gè)這兩個(gè)分別被掛起執(zhí)行棧為空時(shí)開始處理完成后處理直到該全部執(zhí)行完然后繼續(xù)主線程調(diào)用棧注每一次事件循環(huán),只處理一個(gè)。 JS異步原理(事件,隊(duì)列) 調(diào)用棧 JS執(zhí)行時(shí)會(huì)形成調(diào)用棧,調(diào)用一個(gè)函數(shù)時(shí),返回地址、參數(shù)、本地變量都會(huì)被推入棧中,如果當(dāng)前正在運(yùn)行的函數(shù)中調(diào)用另外一個(gè)函數(shù),則該函數(shù)相關(guān)內(nèi)容也會(huì)被推入棧頂.該函數(shù)執(zhí)...

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

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

0條評(píng)論

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