Baseline Widely available *
ã¡ã¢: ãã®æ©è½ã¯ã¦ã§ãã¯ã¼ã«ã¼å ã§å©ç¨å¯è½ã§ãã
addEventListener()
㯠EventTarget
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ã¡ã½ããã§ãã¿ã¼ã²ããã«ç¹å®ã®ã¤ãã³ããé
ä¿¡ããããã³ã«å¼ã³åºããã颿°ãè¨å®ãã¾ãã
対象ã¨ãã¦ãããããã®ã¯ Element
ãDocument
ãWindow
ã§ãããã¤ãã³ãã«å¯¾å¿ãããããããªãã¸ã§ã¯ãã対象ã«ãªããã¨ãã§ãã¾ãï¼IDBRequest
ãªã©ï¼ã
ã¡ã¢: addEventListener()
ã¡ã½ããã¯ãã¤ãã³ããªã¹ãã¼ãç»é²ããããã®æ¨å¥¨ãããæ¹æ³ã§ãã以ä¸ã®ãããªé·æãããã¾ãã
onXYZ
ããããã£ã使ç¨ããã®ã¨ã¯å¯¾ç
§çã«ããªã¹ãã¼ãèµ·åãããã¨ãã®ãã§ã¼ãºï¼ãã£ããã£ã¨ãããªã³ã°ï¼ãããç´°ããå¶å¾¡ã§ãã¾ããaddEventListener()
ã¡ã½ããã¯ã颿°ã¾ã㯠handleEvent()
颿°ãå®è£
ãããªãã¸ã§ã¯ãããå¼ã³åºããã EventTarget
ã«ãããæå®ãããã¤ãã³ã種å¥ã®ã¤ãã³ããªã¹ãã¼ã®ãªã¹ãã«å ãããã¨ã§åä½ãã¾ãããã®é¢æ°ããªãã¸ã§ã¯ããæ¢ã«ã¿ã¼ã²ããã®ã¤ãã³ããªã¹ãã¼ã®ãªã¹ãã«ãã£ãå ´åã¯ããã®é¢æ°ããªãã¸ã§ã¯ããäºéã«è¿½å ããããã¨ã¯ããã¾ããã
ã¡ã¢: ããç¡å颿°ãç¹å®ã®ã¿ã¼ã²ããã§ã¤ãã³ããªã¹ãã¼ã®ãªã¹ãã«ç»é²ããã¦ãããå¾ã®ã³ã¼ãã§åãç¡å颿°ã addEventListener
ã®å¼ã³åºãã«æå®ãããå ´åã2 ã¤ç®ã®é¢æ°ããã®ã¿ã¼ã²ããã®ã¤ãã³ããªã¹ãã¼ã®ãªã¹ãã«è¿½å ããã¾ãã
å®éãç¡å颿°ã¯ãåã夿´ã®ãªãã½ã¼ã¹ã³ã¼ãã§å®ç¾©ããã¦ç¹°ãè¿ãå¼ã³åºããã¦ããç¹°ãè¿ãã®ä¸ã§ãåä¸ã«ã¯ãªãã¾ããã
ãã®ãããªå ´åãåãç¡å颿°ãç¹°ãè¿ãå®ç¾©ãããã¨ã¯åé¡ã«ãªããã¨ãããã¾ããï¼å¾è¿°ã®ã¡ã¢ãªã¼ã®åé¡ãåç §ãã¦ãã ããï¼ã
ã¤ãã³ããªã¹ãã¼ãä»ã®ãªã¹ãã¼ã®å
é¨ãã¤ã¾ãã¤ãã³ãã®å¦çä¸ã« EventTarget
ã«è¿½å ãããå ´åããã®ã¤ãã³ããæ°ãããªã¹ãã¼ãèµ·åãããã¨ã¯ããã¾ããã ããããæ°ãããªã¹ãã¼ã¯ããããªã³ã°ä¸ãªã©ãã¤ãã³ãããã¼ã®å¾ã®æ®µéã§å¼ã³åºããããã¨ãããã¾ãã
addEventListener(type, listener)
addEventListener(type, listener, options)
addEventListener(type, listener, useCapture)
弿°
type
対象ã¨ããã¤ãã³ãã®ç¨®é¡ã表ãæååã§ãã
listener
æå®ããã種é¡ã®ã¤ãã³ããçºçããã¨ãã«éç¥ï¼Event
ã¤ã³ã¿ã¼ãã§ã¤ã¹ãå®è£
ãã¦ãããªãã¸ã§ã¯ãï¼ãåãåããªãã¸ã§ã¯ãããã㯠null
ã§ããããhandleEvent()
ã¡ã½ããã®ãããªãã¸ã§ã¯ãããJavaScript ã®é¢æ°ã®ããããã§ãªããã°ãªãã¾ãããã³ã¼ã«ããã¯ã«ã¤ãã¦è©³ããã¯ãã¤ãã³ããªã¹ãã¼ã®ã³ã¼ã«ããã¯ãåç
§ãã¦ãã ããã
options
çç¥å¯
対象ã®ã¤ãã³ããªã¹ãã¼ã®ç¹æ§ãæå®ããããªãã·ã§ã³ã®ãªãã¸ã§ã¯ãã§ãã æ¬¡ã®ãªãã·ã§ã³ã使ç¨ã§ãã¾ãã
capture
çç¥å¯
EventTarget
ã«é
ä¿¡ (dispatch) ãããåã«ãç»é²ããã listener
ã«é
ä¿¡ããããã¨ã示ãã¾ããæå®ããã¦ããªãå ´åã¯ãæ¢å®ã§ false
ã«ãªãã¾ããonce
çç¥å¯
listener
ã®å¼ã³åºããä¸åã®ã¿ã®ã¨ããããã©ãããå¤ã§æå®ãã¾ãã true
ãæå®ããã¨ã listener
ã¯ä¸åº¦å®è¡ãããæã«èªåçã«åé¤ããã¾ããæå®ããã¦ããªãå ´åã¯ãæ¢å®ã§ false
ã«ãªãã¾ããpassive
çç¥å¯
true
ãªãã°ã listener
ã§æå®ããã颿°ã preventDefault()
ãå¼ã³åºããªããã¨ã示ãã¾ããå¼ã³åºããããªã¹ãã¼ã preventDefault()
ãå¼ã³åºãã¨ãã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ãã¯ä½ããããã³ã³ã½ã¼ã«ã«è¦åãåºåãããå¯è½æ§ãããã¾ãããã®ãªãã·ã§ã³ãæå®ããã¦ããªãå ´åãæ¢å®ã§ false
ã«ãªãã¾ãããã ããSafari 以å¤ã®ãã©ã¦ã¶ã¼ã§ã¯ãwheel
ãmousewheel
ãtouchstart
ãtouchmove
ã®åã¤ãã³ãã§ã¯ true
ã«ãªãã¾ãã詳細ã¯ããã·ããªã¹ãã¼ã®ä½¿ç¨ãã覧ãã ããã
signal
çç¥å¯
AbortSignal
ã§ãããã® AbortSignal
ãæã¤ AbortController
ãªãã¸ã§ã¯ãã® abort()
ã¡ã½ãããå¼ã³åºãããæã«ããªã¹ãã¼ãåé¤ããã¾ããæå®ããã¦ãªãã£ãå ´åã¯ãAbortSignal
ããªã¹ãã¼ã«é¢é£ä»ãããã¾ãããuseCapture
çç¥å¯
è«çå¤ã§ããã®åã®ã¤ãã³ãããDOM ããªã¼å
ã®ä¸ã® EventTarget
ã«é
ä¿¡ãããåã«ãç»é²ããã listener
ã«é
ä¿¡ããããã©ããã示ãã¾ããããªã¼ã䏿¹åã«ãããªã³ã°ãã¦ããã¤ãã³ãã¯ããã£ããã£ã使ç¨ããããã«æå®ããããªã¹ãã¼ãèµ·åãã¾ãããã¤ãã³ãã®ãããªã³ã°ã¨ãã£ããã£ã¯ã両æ¹ã®è¦ç´ ããã®ã¤ãã³ãã®ãã³ãã©ã¼ãç»é²ãã¦ããå ´åã«ãå¥ã®è¦ç´ å
ã«å
¥ãåã«ãªã£ã¦ããè¦ç´ ã§çºçããã¤ãã³ãã伿ãã 2 ã¤ã®æ¹æ³ã§ããã¤ãã³ã伿ã¢ã¼ãã¯ãè¦ç´ ãã¤ãã³ããåãåãé çªã決å®ãã¾ãã詳細ãªèª¬æã¯ DOM Level 3 Events 㨠JavaScript Event order ãåç
§ãã¦ãã ããã æå®ããã¦ããªãå ´åã useCapture
ã¯æ¢å®ã§ false
ã¨ãªãã¾ãã
ã¡ã¢: ã¤ãã³ãã¿ã¼ã²ããã«ç»é²ãããã¤ãã³ããªã¹ãã¼ã¯ããã£ããã£ãã§ã¼ãºããããªã³ã°ãã§ã¼ãºã§ã¯ãªããã¿ã¼ã²ãããã§ã¼ãºã®ã¤ãã³ãã«ãªãã¾ãã ãã£ããã£ãã§ã¼ãºã®ã¤ãã³ããªã¹ãã¼ã¯ãã¿ã¼ã²ãããã§ã¼ãºããã³ãããªã³ã°ãã§ã¼ãºã®ã¤ãã³ããªã¹ãã¼ã®åã«å¼ã³åºããã¾ãã
wantsUntrusted
çç¥å¯ 鿍æº
Firefox (Gecko) ç¬èªã®å¼æ°ã§ããtrue
ã®å ´åããã®ãªã¹ãã¼ã¯ã¦ã§ãã³ã³ãã³ãã«ãã£ã¦çºè¡ãããåæã¤ãã³ã (ã«ã¹ã¿ã ã¤ãã³ã) ãåãåãã¾ã (ãã©ã¦ã¶ã¼ã®ã¯ãã¼ã ã§ã¯æ¢å®ã§ false
ã§ãããä¸è¬ã®ã¦ã§ããã¼ã¸ã§ã¯ true
ã§ã)ããã®å¼æ°ã¯ã主ã«ã¢ããªã³ããã©ã¦ã¶ã¼èªèº«ã®å½¹ã«ç«ã¤ãã®ã§ãã
ãªã (undefined
)ã
ã¤ãã³ããªã¹ãã¼ã«ã¯ãã³ã¼ã«ããã¯é¢æ°ã¾ã㯠handleEvent()
ã¡ã½ãããæã¤ãªãã¸ã§ã¯ãã®ãããããã³ã¼ã«ããã¯é¢æ°ã¨ãã¦æå®ãããã¨ãã§ãã¾ãã
ã³ã¼ã«ããã¯é¢æ°èªä½ã¯ã handleEvent()
ã¡ã½ããã¨åã弿°ã¨è¿å¤ãæã¡ã¾ããã¤ã¾ããã³ã¼ã«ããã¯é¢æ°ã¯çºçããã¤ãã³ãã説æãã Event
ã«åºã¥ããªãã¸ã§ã¯ããå¯ä¸ã®å¼æ°ã¨ãã¦åãä»ããä½ãè¿ãã¾ããã
ãã¨ãã°ã次ã®ã¤ãã³ããã³ãã©ã¼ã³ã¼ã«ããã¯ã¯ã fullscreenchange
ããã³ fullscreenerror
ã®ä¸¡æ¹ãå¦çããããã«ä½¿ç¨ãããã¨ãã§ãã¾ãã
function handleEvent(event) {
if (event.type === "fullscreenchange") {
/* å
¨ç»é¢ã¢ã¼ãã¸ã®åãæ¿ããå¦ç */
} else {
/* å
¨ç»é¢ã¢ã¼ãã¸ã®åãæ¿ãã¨ã©ã¼ãå¦ç */
}
}
ãã³ãã©ã¼å
ã§ã® "this" ã®å¤
ã¤ãã³ããã³ãã©ã¼ãçºè¡ãããè¦ç´ ãåç §ãããã¨ã¯ãããããã¨ã§ãä¼¼ããããªè¦ç´ ã®è¨å®ã«æ±ç¨ãã³ãã©ã¼ã使ç¨ããå ´åãªã©ã«ä¾¿å©ã§ãã
ãã³ãã©ã¼é¢æ°ã addEventListener()
ã使ç¨ãã¦è¦ç´ ã«è£
çããå ´åããã³ãã©ã¼å
ã® this
ã®å¤ã¯è¦ç´ ãåç
§ãã¾ãããã³ãã©ã¼ã«æ¸¡ãã¤ãã³ã弿°ã® currentTarget
ããããã£ã®å¤ã¨åãã«ãªãã¾ãã
my_element.addEventListener("click", function (e) {
console.log(this.className); // my_element ã® className ããã°åºå
console.log(e.currentTarget === this); // `true` ããã°åºå
});
注æç¹ã¨ãã¦ãã¢ãã¼é¢æ°ã¯èªåèªèº«ã§ this
ã³ã³ããã¹ããæã¤ãã¨ã¯ããã¾ããã
my_element.addEventListener("click", (e) => {
console.log(this.className); // è¦å: `this` 㯠`my_element` ã§ã¯ãªã
console.log(e.currentTarget === this); // `false` ããã°åºå
});
ã¤ãã³ããã³ãã©ã¼ï¼ä¾ãã°ãonclick
ï¼ã HTML ã½ã¼ã¹ã®è¦ç´ ã«æå®ããã¦ããå ´åã屿§å¤ã® JavaScript ã³ã¼ãã¯å®è³ªçã«ãã³ãã©ã¼é¢æ°ã«ã©ãããããaddEventListener()
ã¨æ´åããæ¹æ³ã§ this
ã®å¤ã«ãã¤ã³ãããã¾ããã³ã¼ãå
ã« this
ãç¾ããå ´åã¯ãè¦ç´ ã¸ã®åç
§ã表ãã¾ãã
<table id="my_table" onclick="console.log(this.id);">
<!-- `this` ã table ã«ãã¤ã³ãããã'my_table' ããã°åºåããã -->
â¦
</table>
屿§å¤å
ã®ã³ã¼ãã«ãã£ã¦å¼ã³åºããã颿°å
ã® this
ã®å¤ã¯ãæ¨æºã«ã¼ã« ã«å¾ã£ã¦åä½ãããã¨ã«æ³¨æãã¦ãã ãããããã¯æ¬¡ã®ä¾ã§è¡¨ç¤ºããã¾ãã
<script>
function logID() {
console.log(this.id);
}
</script>
<table id="my_table" onclick="logID();">
<!-- å¼ã³åºãããéã`this` ã¯ã°ãã¼ãã«ãªãã¸ã§ã¯ããæã -->
â¦
</table>
logID()
å
ã® this
ã®å¤ã¯ã°ãã¼ãã«ãªãã¸ã§ã¯ã Window
ã¸ã®åç
§ã§ãï¼å³æ ¼ã¢ã¼ãã®å ´å㯠undefined
ï¼ã
Function.prototype.bind()
ã¡ã½ããã使ç¨ããã¨ãä¿®æ£ããã this
ã³ã³ããã¹ãããã®å¾ã®ãã¹ã¦ã®å¼ã³åºãã«ä½¿ç¨ãããã¨ãã§ãã¾ãããã ãããªã¹ãã¼ã¸ã®åç
§ãä¿æãã¦ããå¿
è¦ããããã¨ã«æ³¨æãã¦ãã ããã
ãã㯠bind()
ã使ç¨ããä¾ã¨ä½¿ç¨ããªãä¾ã§ãã
class Something {
name = "Something Good";
constructor(element) {
// bind ã«ãã£ã¦ãä¿®æ£ããã `this` ã³ã³ããã¹ãã `onclick2` ã«ä»£å
¥ããã
this.onclick2 = this.onclick2.bind(this);
element.addEventListener("click", this.onclick1, false);
element.addEventListener("click", this.onclick2, false); // Trick
}
onclick1(event) {
console.log(this.name); // undefinedï¼`this` ãè¦ç´ ã§ããããï¼
}
onclick2(event) {
console.log(this.name); // 'Something Good'ï¼`this` ã Something ã¤ã³ã¿ã¼ãã§ã¤ã¹ã«çµã³ä»ãããã¦ããããï¼
}
}
const s = new Something(document.body);
ããä¸ã¤ã®è§£æ±ºçã¯ãhandleEvent()
ã¨å¼ã°ããç¹å¥ãªé¢æ°ã使ç¨ãã¦ã¤ãã³ããææãããã¨ã§ãã
class Something {
name = "Something Good";
constructor(element) {
// ãã®å ´åã®ãªã¹ãã¼ã¯ `this` ã§ããã this.handleEvent ã§ã¯ãªããã¨ã«æ³¨æ
element.addEventListener("click", this, false);
element.addEventListener("dblclick", this, false);
}
handleEvent(event) {
console.log(this.name); // 'Something Good'ï¼æ°ãã使ããããªãã¸ã§ã¯ãã«çµã³ä»ãããã¦ããããï¼
switch (event.type) {
case "click":
// ããã«ããããã®ã³ã¼ãâ¦
break;
case "dblclick":
// ããã«ããããã®ã³ã¼ãâ¦
break;
}
}
}
const s = new Something(document.body);
this
ã¸ã®åç
§ãå¦çããããä¸ã¤ã®æ¹æ³ã¯ãå¥åã® this
ã³ã³ããã¹ãã使ããªãã¢ãã¼é¢æ°ã使ç¨ãããã¨ã§ãã
class SomeClass {
name = "Something Good";
register() {
window.addEventListener("keydown", (e) => {
this.someMethod(e);
});
}
someMethod(e) {
console.log(this.name);
switch (e.code) {
case "ArrowUp":
// ããã«ããããã®ã³ã¼ãâ¦
break;
case "ArrowDown":
// ããã«ããããã®ã³ã¼ãâ¦
break;
}
}
}
const myObject = new SomeClass();
myObject.register();
ã¤ãã³ããªã¹ãã¼ã®ãã¼ã¿ã®åºãå
¥ã
ã¤ãã³ããªã¹ãã¼ã¯ Event
ã¾ã㯠Event
ã®ãµãã¯ã©ã¹ã®å¼æ°ã 1 ã¤ã ãåãã¾ãããããã¯èªåçã«ãªã¹ãã¼ã«æ¸¡ãããè¿å¤ã¯ç¡è¦ããã¾ãã ãããã£ã¦ãã¤ãã³ããªã¹ãã¼ã«ãã¼ã¿ãåå¾ããããã¤ãã³ããªã¹ãã¼ãããã¼ã¿ãåå¾ãããããã«ã¯ã弿°ã¨è¿å¤ã§ãã¼ã¿ã渡ãã®ã§ã¯ãªãã代ããã«ã¯ãã¼ã¸ã£ã使ããå¿
è¦ãããã¾ãã
ã¤ãã³ããªã¹ãã¼ã¨ãã¦æ¸¡ããã颿°ã¯ããã®é¢æ°ãæ ¼ç´ããå¤é¨ã¹ã³ã¼ãã§å®£è¨ããããã¹ã¦ã®å¤æ°ã«ã¢ã¯ã»ã¹ãããã¨ãã§ãã¾ãã
const myButton = document.getElementById("my-button-id");
let someString = "Data";
myButton.addEventListener("click", () => {
console.log(someString);
// æåã®ã¯ãªãã¯ã§ã¯ 'Data' ã¨ãªãã
// 2 çªç®ã®ã¯ãªãã¯ã§ã¯ 'Data Again' ã¨ãªã
someString = "Data Again";
});
console.log(someString); // æå¾
ãããå¤: 'Data' ï¼'Data Again' ã¨ã¯ãªããªãï¼
颿°ã¹ã³ã¼ãã«é¢ãã詳細æ å ±ã¯ã颿°ã¬ã¤ãããèªã¿ãã ããã
ã¡ã¢ãªã¼ã®åé¡const elems = document.getElementsByTagName("*");
// ã±ã¼ã¹ 1
for (const elem of elems) {
elem.addEventListener(
"click",
(e) => {
// ä½ããè¡ã
},
false,
);
}
// ã±ã¼ã¹ 2
function processEvent(e) {
// ä½ããè¡ã
}
for (const elem of elems) {
elem.addEventListener("click", processEvent, false);
}
ä¸è¨ã® 1 ã¤ç®ã®ã±ã¼ã¹ã§ã¯ãã«ã¼ãã®ç¹°ãè¿ããã¨ã«æ°ããï¼ç¡åã®ï¼ãã³ãã©ã¼é¢æ°ã使ããã¾ãã䏿¹ã 2 ã¤ç®ã®ã±ã¼ã¹ã§ã¯ã以åã«å®£è¨ããåã颿°ãã¤ãã³ããã³ãã©ã¼ã¨ãã¦ä½¿ç¨ããã使ããããã³ãã©ã¼é¢æ°ã 1 ã¤ã§ãããããã¡ã¢ãªã¼æ¶è²»éãå°ãªããªãã¾ããããã«ãæåã®ã±ã¼ã¹ã§ã¯ãç¡å颿°ã¸ã®åç
§ãä¿æãããªãããã removeEventListener()
ãå¼ã³åºããã¨ãã§ãã¾ããï¼ããã§ã¯ãã«ã¼ããçæããå¯è½æ§ãããè¤æ°ã®ç¡å颿°ã¸ã®åç
§ãä¿æããã¾ããï¼ã2 çªç®ã®ã±ã¼ã¹ã§ã¯ãprocessEvent
ã颿°ã®åç
§ãªã®ã§ãmyElement.removeEventListener("click", processEvent, false)
ãå®è¡ãããã¨ãå¯è½ã§ãã
å®ã¯ãã¡ã¢ãªã¼æ¶è²»ã«é¢ãã¦ã¯ã颿°åç §ãä¿æããªããã¨ãæ¬å½ã®åé¡ã§ã¯ãªããããããéçãªé¢æ°åç §ãä¿æããªããã¨ãåé¡ãªã®ã§ãã
ããã·ããªã¹ãã¼ã®ä½¿ç¨ã¤ãã³ãã«æ¢å®ã®ã¢ã¯ã·ã§ã³ãããå ´åãä¾ãã°ãæ¢å®ã§ã³ã³ããã¼ãã¹ã¯ãã¼ã«ãã wheel
ã¤ãã³ãã®å ´åãã¤ãã³ããªã¹ãã¼ã Event.preventDefault()
ãå¼ã³åºãã¦æ¢å®ã®ã¢ã¯ã·ã§ã³ããã£ã³ã»ã«ãããã©ãããäºåã«ç¥ããã¨ãã§ããªãããããã©ã¦ã¶ã¼ã¯ä¸è¬çã«ã¤ãã³ããªã¹ãã¼ãå®äºããã¾ã§æ¢å®ã®ã¢ã¯ã·ã§ã³ãéå§ãããã¨ãã§ãã¾ãããã¤ãã³ããªã¹ãã¼ã®å®è¡ã«æéãããããããã¨ãæ¢å®ã®ã¢ã¯ã·ã§ã³ãå®è¡ãããã¾ã§ã«ãã¸ã£ã³ã¯ã¨å¼ã°ããé¡èãªé
å»¶ãçºçããå¯è½æ§ãããã¾ãã
passive
ãªãã·ã§ã³ã true
ã«è¨å®ããã¨ãã¤ãã³ããªã¹ãã¼ã¯æ¢å®ã®ã¢ã¯ã·ã§ã³ãåãæ¶ããªããã¨ã宣è¨ããããããã©ã¦ã¶ã¼ã¯ãªã¹ãã¼ãå®äºããã®ãå¾
ããã«ãæ¢å®ã®ã¢ã¯ã·ã§ã³ãããã«éå§ã§ãã¾ãããªã¹ãã¼ã Event.preventDefault()
ãå¼ã³åºãã¦ãã广ã¯ããã¾ããã
addEventListener()
ã®ä»æ§æ¸ã§ã¯ãpassive
ãªãã·ã§ã³ã®æ¢å®å¤ã¯å¸¸ã« false
ã§ããã¨å®ç¾©ãã¦ãã¾ããããããããã·ããªã¹ãã¼ã®ã¹ã¯ãã¼ã«ããã©ã¼ãã³ã¹ã®å©ç¹ãå¤ãã³ã¼ãã§å®ç¾ããããã«ãæè¿ã®ãã©ã¦ã¶ã¼ã§ã¯ wheel
ãmousewheel
ãtouchstart
ãtouchmove
ã®åã¤ãã³ãã® passive
ãªãã·ã§ã³ã®æ¢å®å¤ããææ¸ã¬ãã«ãã¼ã Window
ãDocument
ãDocument.body
ã«ããã¦ã¯ true
ã«å¤æ´ããã¦ãã¾ããããã«ãããã¤ãã³ããªã¹ãã¼ãã¤ãã³ããåãæ¶ãããå¯è½æ§ãé²ããã¨ãã§ããã®ã§ãã¦ã¼ã¶ã¼ãã¹ã¯ãã¼ã«ãã¦ããéã«ãã¼ã¸ã®ã¬ã³ããªã³ã°ããããã¯ãããã¨ã¯ããã¾ããã
ãã®ãããï¼æ¢å®å¤ã«é ¼ããã«ï¼ãã®åä½ã䏿¸ãã㦠passive
ãªãã·ã§ã³ã確å®ã« false
ã«ãããå ´åã¯ãæç¤ºçã«ãã®ãªãã·ã§ã³ã false
ã«è¨å®ããå¿
è¦ãããã¾ãã
åºæ¬ç㪠scroll
ã¤ãã³ãã«ã¤ãã¦ãpassive
ã®å¤ãæ°ã«ããå¿
è¦ã¯ããã¾ããã åãæ¶ãããå¯è½æ§ããªããããã¤ãã³ããªã¹ãã¼ããã¼ã¸ã®ã¬ã³ããªã³ã°ããããã¯ãããã¨ã¯ããã¾ããã
ããã·ããªã¹ãã¼ã®å¹æã示ãä¾ã«ã¤ãã¦ã¯ããã·ããªã¹ãã¼ã«ããã¹ã¯ãã¼ã«ã®æ§è½æ¹åãåç §ãã¦ãã ããã
ä¾ ã·ã³ãã«ãªãªã¹ãã¼ã®è¿½åãã®ä¾ã¯ãè¦ç´ ä¸ã§ã®ãã¦ã¹ã¯ãªãã¯ãç£è¦ããããã® addEventListener()
ã®ä½¿ãæ¹ãç´¹ä»ãã¾ãã
<table id="outside">
<tr>
<td id="t1">one</td>
</tr>
<tr>
<td id="t2">two</td>
</tr>
</table>
JavaScript
// t2 ã®å
容ã夿´ãã颿°
function modifyText() {
const t2 = document.getElementById("t2");
const isNodeThree = t2.firstChild.nodeValue === "three";
t2.firstChild.nodeValue = isNodeThree ? "two" : "three";
}
// ã¤ãã³ããªã¹ãã¼ã table ã«è¿½å
const el = document.getElementById("outside");
el.addEventListener("click", modifyText, false);
ãã®ã³ã¼ãã®ä¸ã§ã modifyText()
㯠click
ã¤ãã³ãã®ãªã¹ãã¼ã§ãããaddEventListener()
ã使ç¨ãã¦ç»é²ããã¦ãã¾ãã表ã®ä¸ã®ã©ãããã¯ãªãã¯ããã¨ããã³ãã©ã¼ã¾ã§ãããªã³ã°ããmodifyText()
ãå®è¡ããã¾ãã
ãã®ä¾ã§ã¯ã addEventListener()
ã§ AbortSignal
ã«ãã䏿ãã§ãããªã¹ãã¼ã追å ããæ¹æ³ã宿¼ãã¦ãã¾ãã
<table id="outside">
<tr>
<td id="t1">one</td>
</tr>
<tr>
<td id="t2">two</td>
</tr>
</table>
JavaScript
// 䏿å¯è½ãªãªã¹ãã¼ã table ã«è¿½å
const controller = new AbortController();
const el = document.getElementById("outside");
el.addEventListener("click", modifyText, { signal: controller.signal });
// t2 ã®å
容ã夿´ãã颿°
function modifyText() {
const t2 = document.getElementById("t2");
if (t2.firstChild.nodeValue === "three") {
t2.firstChild.nodeValue = "two";
} else {
t2.firstChild.nodeValue = "three";
controller.abort(); // "three" ã«ãªã£ãããªã¹ãã¼ãåé¤
}
}
ä¸ã®ä¾ã§ã¯ã2 è¡ç®ã®ã³ã³ãã³ãã "three" ã«å¤æ´ãããå¾ã«ã addEventListener()
ã®å¼ã³åºãã«æ¸¡ãã AbortController
ãã abort()
ãå¼ã³åºãããã«ãååã®ã³ã¼ãã夿´ãã¦ãã¾ãããã®çµæãã¯ãªãã¯ã¤ãã³ããå¾
ã¡åãããã³ã¼ãããªããªã£ãã®ã§ãå¤ã¯æ°¸é ã« "three" ã®ã¾ã¾ã¨ãªãã¾ãã
ããã§ãç¡å颿°ã使ç¨ãã¦ã¤ãã³ããªã¹ãã¼ã«å¼æ°ãæ¸¡ãæ¹æ³ãè¦ã¦ã¿ã¾ãããã
HTML<table id="outside">
<tr>
<td id="t1">one</td>
</tr>
<tr>
<td id="t2">two</td>
</tr>
</table>
JavaScript
// t2 ã®ã³ã³ãã³ãã夿´ãã颿°
function modifyText(new_text) {
const t2 = document.getElementById("t2");
t2.firstChild.nodeValue = new_text;
}
// ã¤ãã³ããªã¹ãã¼ã table ã«è¿½å ãã颿°
const el = document.getElementById("outside");
el.addEventListener(
"click",
function () {
modifyText("four");
},
false,
);
ãªãããªã¹ãã¼ã¯å®éã«ã¤ãã³ãã«å¿çãã modifyText()
颿°ã«å¼æ°ãéä¿¡ãããã¨ãã§ããã³ã¼ããã«ãã»ã«åãã¦ããç¡å颿°ã§ãããã¨ã«æ³¨æãã¦ãã ããã
ãã®ä¾ã¯ã¢ãã¼é¢æ°è¨æ³ã使ç¨ãã¦å®è£ ãããã¤ãã³ããªã¹ãã¼ãç´¹ä»ãã¦ãã¾ãã
HTML<table id="outside">
<tr>
<td id="t1">one</td>
</tr>
<tr>
<td id="t2">two</td>
</tr>
</table>
JavaScript
// t2 ã®ä¸èº«ã夿´ããããã®é¢æ°
function modifyText(new_text) {
const t2 = document.getElementById("t2");
t2.firstChild.nodeValue = new_text;
}
// ã¢ãã¼é¢æ°ã§ table ã«ã¤ãã³ããªã¹ãã¼ã追å
const el = document.getElementById("outside");
el.addEventListener(
"click",
() => {
modifyText("four");
},
false,
);
çµæ
ãªããç¡å颿°ã¨ã¢ãã¼é¢æ°ã¯ä¼¼ã¦ãããéã㯠this
ãçµã³ä»ãããã©ããã§ããç¡å颿°ï¼ããã³å¾æ¥ã®ãã¹ã¦ã® JavaScript 颿°ï¼ã¯åºæã® this
ã使ããã®ã«å¯¾ããã¢ãã¼é¢æ°ã¯ãããå«ã颿°ã® this
ãç¶æ¿ãã¾ãã
ã¤ã¾ããã¢ãã¼é¢æ°ã使ç¨ããã¨ãã¯ããããå«ã颿°ã®å¤æ°ã宿°ãã¤ãã³ããã³ãã©ã¼ã§å©ç¨ãããã¨ãã§ãã¾ãã
options ã®ä½¿ãæ¹ã®ä¾ HTML<div class="outer">
outer, once & none-once
<div class="middle" target="_blank">
middle, capture & none-capture
<a class="inner1" href="https://www.mozilla.org" target="_blank">
inner1, ããã·ã & preventDefaultï¼è¨±å¯ããã¦ããªãï¼
</a>
<a class="inner2" href="https://developer.mozilla.org/" target="_blank">
inner2, ããã·ã & preventDefaultï¼æ°ãããã¼ã¸ãéããªãï¼
</a>
</div>
</div>
<hr />
<button class="clear-button">ãã°ãã¯ãªã¢</button>
<section class="demo-logs"></section>
CSS
.outer,
.middle,
.inner1,
.inner2 {
display: block;
width: 520px;
padding: 15px;
margin: 15px;
text-decoration: none;
}
.outer {
border: 1px solid red;
color: red;
}
.middle {
border: 1px solid green;
color: green;
width: 460px;
}
.inner1,
.inner2 {
border: 1px solid purple;
color: purple;
width: 400px;
}
.demo-logs {
width: 530px;
height: 16rem;
background-color: #ddd;
overflow-x: auto;
padding: 1rem;
}
JavaScript
const clearBtn = document.querySelector(".clear-button");
const demoLogs = document.querySelector(".demo-logs");
function log(msg) {
demoLogs.innerText += `${msg}\n`;
}
clearBtn.addEventListener("click", () => {
demoLogs.innerText = "";
});
const outer = document.querySelector(".outer");
const middle = document.querySelector(".middle");
const inner1 = document.querySelector(".inner1");
const inner2 = document.querySelector(".inner2");
const capture = {
capture: true,
};
const noneCapture = {
capture: false,
};
const once = {
once: true,
};
const noneOnce = {
once: false,
};
const passive = {
passive: true,
};
const nonePassive = {
passive: false,
};
outer.addEventListener("click", onceHandler, once);
outer.addEventListener("click", noneOnceHandler, noneOnce);
middle.addEventListener("click", captureHandler, capture);
middle.addEventListener("click", noneCaptureHandler, noneCapture);
inner1.addEventListener("click", passiveHandler, passive);
inner2.addEventListener("click", nonePassiveHandler, nonePassive);
function onceHandler(event) {
log("outerãonce");
}
function noneOnceHandler(event) {
log("outerãé onceãæ¢å®å¤\n");
}
function captureHandler(event) {
//event.stopImmediatePropagation();
log("middleãcapture");
}
function noneCaptureHandler(event) {
log("middleãé captureãæ¢å®å¤");
}
function passiveHandler(event) {
// ããã·ãã¤ãã³ããªã¹ãã¼ã®å¼ã³åºãã®ä¸ã§ã¯ preventDefault ã¯å®è¡ã§ããªã
event.preventDefault();
log("inner1ãpassiveãæ°ãããã¼ã¸ãéã");
}
function nonePassiveHandler(event) {
event.preventDefault();
//event.stopPropagation();
log("inner2ãé passiveãæ¢å®å¤ãæ°ãããã¼ã¸ãéããªã");
}
çµæ
å¤å´ãä¸å¤®ãå å´ã®ã³ã³ããã¼ãããããã¯ãªãã¯ãã¦ããªãã·ã§ã³ãã©ã®ããã«åä½ãããã確èªãã¦ãã ããã
è¤æ°ã®ãªãã·ã§ã³ãæã¤ã¤ãã³ããªã¹ãã¼å¼æ°ã® options
ã«ã¯è¤æ°ã®ãªãã·ã§ã³ãè¨å®ãããã¨ãã§ãã¾ããæ¬¡ã®ä¾ã§ã¯ã2 ã¤ã®ãªãã·ã§ã³ãè¨å®ãã¦ãã¾ãã
passive
: ãã³ãã©ã¼ã preventDefault()
ãå¼ã³åºããªããã¨ã示ãã¾ããonce
: ã¤ãã³ããã³ãã©ã¼ãä¸åº¦ã ãããå¼ã³åºãããªããã¨ãä¿è¨¼ãã¾ãã<button id="example-button">ãã®ãã¿ã³ã¯ã¯ãªãã¯ããã¦ãã¾ããã</button>
<button id="reset-button">ãã®ãã¿ã³ãã¯ãªãã¯ããã¨ãæåã®ãã¿ã³ããªã»ããããã¾ãã</button>
JavaScript
const buttonToBeClicked = document.getElementById("example-button");
const resetButton = document.getElementById("reset-button");
// ãã¿ã³ã®åæåããã¹ã
const initialText = buttonToBeClicked.textContent;
// ãã¿ã³ãã¯ãªãã¯ãããå¾ã®å
容ã®ããã¹ã
const clickedText = "ãã®ãã¿ã³ãã¯ãªãã¯ããã¾ããã";
// ã¤ãã³ããªã¹ãã¼ã®ã³ã¼ã«ããã¯é¢æ°ã¯ããªã¹ãã¼ãéè¤ãã¦è£
çãããã®ãé²ããã
// ã¤ãã³ããªã¹ãã¼ã®ã³ã¼ã«ããã¯é¢æ°ãå·»ãä¸ããã¦ãã¾ãã
function eventListener() {
buttonToBeClicked.textContent = clickedText;
}
function addListener() {
buttonToBeClicked.addEventListener("click", eventListener, {
passive: true,
once: true,
});
}
// ãªã»ãããã¿ã³ãã¯ãªãã¯ãããã¨ãä¾ãã°ãã¿ã³ããªã»ããããã
// ãã®ç¶æ
ãåã³æ´æ°ãããããã«ãã¾ãã
resetButton.addEventListener("click", () => {
buttonToBeClicked.textContent = initialText;
addListener();
});
addListener();
çµæ ããã·ããªã¹ãã¼ã«ããã¹ã¯ãã¼ã«ã®æ§è½æ¹å
次ã®ä¾ã¯ passive
ãè¨å®ãã广ã示ãã¦ãã¾ããããã¹ãã¨ãã§ãã¯ããã¯ã¹ãå«ã <div>
ãããã¾ãã
<div id="container">
<p>
But down there it would be dark now, and not the lovely lighted aquarium she
imagined it to be during the daylight hours, eddying with schools of tiny,
delicate animals floating and dancing slowly to their own serene currents
and creating the look of a living painting. That was wrong, in any case. The
ocean was different from an aquarium, which was an artificial environment.
The ocean was a world. And a world is not art. Dorothy thought about the
living things that moved in that world: large, ruthless and hungry. Like us
up here.
</p>
</div>
<div>
<input type="checkbox" id="passive" name="passive" checked />
<label for="passive">ããã·ã</label>
</div>
#container {
width: 150px;
height: 200px;
overflow: scroll;
margin: 2rem 0;
padding: 0.4rem;
border: 1px solid black;
}
JavaScript
ãã®ã³ã¼ãã¯ãã³ã³ããã¼ã® wheel
ã¤ãã³ãã«ãªã¹ãã¼ã追å ãããã®ã§ãæ¢å®ã§ã¯ã³ã³ããã¼ãã¹ã¯ãã¼ã«ãã¾ãããªã¹ãã¼ã¯é·æéå®è¡ããå¦çãå®è¡ãã¾ããåæç¶æ
ã§ã¯ããªã¹ãã¼ã¯ passive
ãªãã·ã§ã³ã§è¿½å ããããã§ãã¯ããã¯ã¹ããã°ã«åãæ¿ãããããã³ã«ãã³ã¼ã㯠passive
ãªãã·ã§ã³ããã°ã«åãæ¿ããã¾ãã
const passive = document.querySelector("#passive");
passive.addEventListener("change", (event) => {
container.removeEventListener("wheel", wheelHandler);
container.addEventListener("wheel", wheelHandler, {
passive: passive.checked,
once: true,
});
});
const container = document.querySelector("#container");
container.addEventListener("wheel", wheelHandler, {
passive: true,
once: true,
});
function wheelHandler() {
function isPrime(n) {
for (let c = 2; c <= Math.sqrt(n); ++c) {
if (n % c === 0) {
return false;
}
}
return true;
}
const quota = 1000000;
const primes = [];
const maximum = 1000000;
while (primes.length < quota) {
const candidate = Math.floor(Math.random() * (maximum + 1));
if (isPrime(candidate)) {
primes.push(candidate);
}
}
console.log(primes);
}
çµæ
å¹æã¯æ¬¡ã®éãã§ãã
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4