先端イベントバインド知識点(面接常考)
9366 ワード
概要
事件はJavaScriptによって検出できる行為です.
ウェブページの各要素は、JavaScript関数またはプログラムをトリガするイベントをいくつか生成することができます.
イベントは通常関数と組み合わせて使用され、イベントが発生した時に関数が実行されます.
JSイベントを実行する方式: HTMLイベント属性は、JavaScriptコード を直接実行することができます. HTMLイベント属性は、JavaScript関数 を呼び出すことができます. HTML要素のために自分のイベントハンドラを指定してもいいです. 事件の発生を阻止することができます. 等… よく使われるJS事件
タイプ
マウスクリックイベント
onclick
マウスを使ったイベント
onmouseover
マウス移動イベント
onmousout
イベントをフォーカス
onfocus
焦点外事件
onblur
イベントを読み込み
onload
ページを更新
onunload(IEだけに有効らしい)
ページを閉じる
onbeforeunload(IEのみ有効らしい)
事件の流れ
イベントフローは、ページからイベントを受け取る順序を説明する. IEのイベントフローは、イベントバーストストリームであり、イベントはサブ要素によって取得され、DOMツリーに沿ってアップロードされる.すなわち、イベントの最初は、最も具体的な要素(ドキュメント内のネストレベルの最も深いノード)によって受信され、その後、段階的に、最も特定されていないノード(Dcument)に上から中継され、 Netscapeのイベントフローはイベントトラッピングストリームであり、イベントはルート要素によって取得され、DOMツリーに沿って下向きに配信される.イベントバーストとは対照的に、イベントキャプチャの考えは、あまり具体的ではないノード(document)は、イベントをより早く受信するべきであり、最も具体的なノードは、最後にイベントを受信する.もう適用されません. .
イベントオブジェクト
HTML DOM Eventオブジェクト
header 1
header 2
イベント
イベント
イベントターゲット
event.target
イベントを追加
element.addEvent Listener(type、listener、false)
イベントを削除
element.removeveEvent Listener(type、listener、false)
事件の泡を防ぐ
event.stopPropagation()
デフォルトの挙動をキャンセル
event.prevent Default()
IE中のイベントオブジェクト
header 1
header 2
イベント
window.イベント
イベントターゲット
event.srcele ment
イベントを追加
element.at tachEvent(‘on’+type,listener)
イベントを削除
element.detachEvent(‘on’+type,listener)
事件の泡を防ぐ
event.ccel Bbble=true
デフォルトの挙動をキャンセル
event.return Value=false
イベントハンドラ
HTMLイベントハンドラ
事件はずっとhtmlの要素の中で書いて、欠点:htmlとjsコードは緊密に結合しています.
一つの関数をイベントの処理プログラムの属性に割り当てます.利点:比較的簡単で、ブラウザを越えてサポートします.短所:複数のイベントハンドラを追加できません.最後のイベントは前のイベントをカバーします.
イベントを
IE 8およびより早いIEバージョンは、addEvent Listener()方法をサポートしておらず、Opera 7.0およびOperaのより早いバージョンもサポートされていない.しかし、これらの関数がサポートされていないブラウザについては、イベントのハンドルを追加するために
多くの要素にイベントを追加する必要がある場合、それらの親ノードにイベントを追加することにより、親ノードにイベントを依頼して処理関数をトリガすることができる.これは主にブラウザのイベント泡発生メカニズムによるものです.
事件はJavaScriptによって検出できる行為です.
ウェブページの各要素は、JavaScript関数またはプログラムをトリガするイベントをいくつか生成することができます.
イベントは通常関数と組み合わせて使用され、イベントが発生した時に関数が実行されます.
JSイベントを実行する方式:
タイプ
マウスクリックイベント
onclick
マウスを使ったイベント
onmouseover
マウス移動イベント
onmousout
イベントをフォーカス
onfocus
焦点外事件
onblur
イベントを読み込み
onload
ページを更新
onunload(IEだけに有効らしい)
ページを閉じる
onbeforeunload(IEのみ有効らしい)
事件の流れ
イベントフローは、ページからイベントを受け取る順序を説明する.
stopPropagation()
方法で発泡を終了する.イベントオブジェクト
HTML DOM Eventオブジェクト
header 1
header 2
イベント
イベント
イベントターゲット
event.target
イベントを追加
element.addEvent Listener(type、listener、false)
イベントを削除
element.removeveEvent Listener(type、listener、false)
事件の泡を防ぐ
event.stopPropagation()
デフォルトの挙動をキャンセル
event.prevent Default()
IE中のイベントオブジェクト
header 1
header 2
イベント
window.イベント
イベントターゲット
event.srcele ment
イベントを追加
element.at tachEvent(‘on’+type,listener)
イベントを削除
element.detachEvent(‘on’+type,listener)
事件の泡を防ぐ
event.ccel Bbble=true
デフォルトの挙動をキャンセル
event.return Value=false
イベントハンドラ
HTMLイベントハンドラ
事件はずっとhtmlの要素の中で書いて、欠点:htmlとjsコードは緊密に結合しています.
<a href="" onclick="alert('msg');"> a>
0レベルDOMイベントハンドラ一つの関数をイベントの処理プログラムの属性に割り当てます.利点:比較的簡単で、ブラウザを越えてサポートします.短所:複数のイベントハンドラを追加できません.最後のイベントは前のイベントをカバーします.
document.getElementById('id').onclick = function () {
alert(1);
}
2級DOMイベントハンドライベントを
addeventlistener()
で追加することにより、removeEventlistener()
でこのイベントを削除することができます.これらは3つのパラメータを受信します.処理するイベント名イベント、イベントハンドラの関数として機能するfunction、およびブール値useCapture.ブールパラメータは、近代的なブラウザの最近のいくつかのバージョンだけではプラスできません.Trueはイベントをキャプチャ段階で実行し、falseは発泡段階で実行することを表します.target.addEventListener(type, listener[, useCapture]);
target.removeEventListener(type, listener[, useCapture]);
IEイベントハンドラIE 8およびより早いIEバージョンは、addEvent Listener()方法をサポートしておらず、Opera 7.0およびOperaのより早いバージョンもサポートされていない.しかし、これらの関数がサポートされていないブラウザについては、イベントのハンドルを追加するために
attachEvent()
方法を使用することができる.イベントをattachEvent()
で追加することにより、detachEvent()
でこのイベントを削除することができます.この2つの方法は、同じ2つのパラメータを受信します.イベントハンドラの名前typeとイベントハンドラの関数functionは、3番目のパラメータをサポートしていない理由:IE 8–発泡ストリームのみをサポートします.element.attachEvent(type, function)
element.detachEvent(type, function)
イベントエージェントと依頼多くの要素にイベントを追加する必要がある場合、それらの親ノードにイベントを追加することにより、親ノードにイベントを依頼して処理関数をトリガすることができる.これは主にブラウザのイベント泡発生メカニズムによるものです.
<div id="box">
<p>Lorem ipsum dolor sit amet.p>
<p>Lorem ipsum dolor sit amet.p>
<p>Lorem ipsum dolor sit amet.p>
div>
<script>
let box = document.getElementById('box');
box.addEventListener('click', function (e) {
// e.targe P
if (e.target.nodeName === 'P') {
//
alert('p');
}
})
script>
ブラウザをまたぐ対応イベントハンドラ(能力検出)/*
* @Author: bxm09
* @Date: 2017-03-24 15:51:37
* @Last Modified by: bxm09
* @Last Modified time: 2017-07-24 13:16:04
* @Desc ( )
*/
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 DOM -> IE -> 0 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
}
});
},
/**
*
* 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 !');