Open eyabc opened 3 years ago
<pre id="rabbit">
|\ /|
\|_|/
/. .\
=\_Y_/=
{>o<}
</pre>
<button onclick="hide()">hide()๋ฅผ ํธ์ถํด ํ ๋ผ ์จ๊ธฐ๊ธฐ</button> (1) onclick ์ผ๋ก ์ธํด hide() ํธ๋ค๋ฌ๊ฐ ์คํ์ด๋จ
<script>
// hide() will be called automatically in 2 seconds
function hide() { (2) ์คํ 2
let event = new CustomEvent("hide", {
cancelable: true // cancelable๋ฅผ true๋ก ์ค์ ํ์ง ์์ผ๋ฉด preventDefault๊ฐ ๋์ํ์ง ์์ต๋๋ค.
}); (3) hide ๋ผ๋ ์ปค์คํ
์ด๋ฒคํธ ์์ฑ
if (!rabbit.dispatchEvent(event)) { (4) ์ปค์คํ
์ด๋ฒคํธ ํธ์ถ
alert('๊ธฐ๋ณธ ๋์์ด ํธ๋ค๋ฌ์ ์ํด ์ทจ์๋์์ต๋๋ค.'); (7) confirm ์ด false ์ผ ๊ฒฝ์ฐ (์ด๋ฒคํธ์ ๊ธฐ๋ณธ๋์์ด ์ทจ์๋ ๊ฒฝ์ฐ)
} else {
rabbit.hidden = true; (8) confirm ์ด true ์ผ ๊ฒฝ์ฐ (์ด๋ฒคํธ์ ๊ธฐ๋ณธ๋์์ด ์ทจ์๋์ง ์์์ ๊ฒฝ์ฐ)
}
}
rabbit.addEventListener('hide', function(event) { (5) ๋ฐ์ธ๋ฉ๋ hide ์ด๋ฒคํธ ํธ๋ค๋ฌ ์คํ
if (confirm("preventDefault๋ฅผ ํธ์ถํ์๊ฒ ์ต๋๊น?")) { (6) ์ด๋ฒคํธ์ ๊ธฐ๋ณธ๋์์ด ์ทจ์๋๋ฉด elem.dispatchEvent(event) ๊ฐ false ๋ฅผ ๋ฐํํฉ๋๋ค. ๋ฐ๋ผ์ confirm yes ๋ฅผ ํ ๊ฒฝ์ฐ, rabbit.dispatchEvent(event) ๋, ๊ธฐ๋ณธ ์ด๋ฒคํธ ๋์์ด ์ทจ์๋์์ผ๋ฏ๋ก false ๋ฐํ, confirm no ์ผ ๊ฒฝ์ฐ event.preventDefault(); ๊ฐ ์คํ๋์ง ์์ผ๋ฏ๋ก true ๋ฐํ
event.preventDefault();
}
});
</script>
โ TODO ์๋ ์์ ์์ ๊ธฐ๋ณธ๋์์ ์ญํ ์ ํ๋ ๊ฑด ํ ๋ผ๋ฅผ ์จ๊ธฐ๋ else{rabbit.hidden=true;} ๋ถ๋ถ์ ์๋ฏธํ๋๊ฑด๊ฐ?
@eyabc composed ์ต์
๋ setTimeout ๊ด๋ จ ๋ด์ฉ๋ ์ง์ด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค! ๋ฌธ์ ์ฐฌ์ฐฌํ ์ฝ์ด๋ณผ๊ฒ์
ํ ๋ผ(?) ์ฝ๋๋ ์์๋์ด ์ฌ๋ ค์ฃผ์ ์ฝ๋๋ ํ์ฑ๋ ๋ฌธ์๋ณด๊ณ ๋ ๋ช
ํํ ์ดํด๋์์ต๋๋ค.
๊ฒฐ๊ตญ https://ko.javascript.info/dispatch-events ๋ฌธ์์ ์๋ ์ปค์คํ
์ด๋ฒคํธ๋ฅผ ๋ง๋ค๊ณ ๋์คํจ์นญ ํด ์ฃผ๋ ์ฝ๋์ ์ํ๋ ๋์์ ๋ฃ์ผ๋ฉด, ์ปค์คํ
์ด๋ฒคํธ์๋ ๊ธฐ๋ณธ ๋์์ ์ค์ ํด์ค ์ ์์ต๋๋ค.
๋ฅผ ์ฐธ๊ณ ํ๋ฉด... ์ด ์์ ์์ ํ ๋ผ๋ฅผ ์จ๊ธฐ๋ ๋์์ด ๊ธฐ๋ณธ๋์์ด์๋ ๊ฑฐ๊ณ ๊ธฐ๋ณธ ๋์์ ์ทจ์ํ๋๋ ๋ง๋์ ๋ฐ๋ผ if else๋ก ํ๋ฅผ ์ ์๋๋ก ํ๊ฑฐ๊ฒ ๊ตฐ์
์ปค์คํ
์ด๋ฒคํธ์ ๊ธฐ๋ณธ๋์์ ์ค์ ํ ๋ ๋ณดํต ์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๋์ง ๊ถ๊ธํ์ฌ ์๊ฒผ๋ ์๋ฌธ์ ์
๋๋ค! ์ฝ๋ ๊ธฐ์
ํด์ฃผ์
์ ๊ฐ์ฌํด์
CustomEvent๊ฐ newEvent์ ๋ค๋ฅธ ์ ๋ถ๋ถ์ ๋ ๋ฐฐ์ฐ๋ฉฐ ์ ์ดํดํ์์ต๋๋ค. ์ถ๊ฐ์ ์ผ๋ก ์ ๊ฐ ๊ถ๊ธ์ฆ์ด ์๋ ๋ถ๋ถ์ ๋ํด ๊ณ ๋ฏผํด์ฃผ๋ฉฐ ๋ต์ ํด์ฃผ์๋ ๋ถ๋ถ ๊ฐ์ฌํฉ๋๋ค.
Event ์ composed ์ต์ ์ ๋ํ ๋ถ๋ถ์ ๋ณด๊ณ ๊ถ๊ธํ์ฌ ์ฐพ์ ๋ณด์์ต๋๋ค. ํต์ฌ์ shadow dom ์ด๋ผ๋ ๊ฐ๋ ์ธ๋ฐ https://wit.nts-corp.com/2019/03/27/5552 ์ฌ๊ธฐ์ ๊ฐ๋ ์ด ์ ๋์ ์๋ค์, ์ฌ์ดํธ๋ค์ ํฌ๋กฌ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ด์ด์ element ๋ฅผ ๊ด์ฐฐ์ ํ์ ๋ ์ข ์ข ๋ณด์ด๋ ๊ฒ๋ค์ด๋ผ ์ต์ํ๊ฒ ๋ณด์๋ค์
์ด๋ฒคํธ๋ฅผ ์ ์ดํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ์๋ฏธ) ๋ํ HTMLElement.click()์ ๊ฐ์ ๋ฉ์๋๋ฅผ ํธ์ถ
์ด๋ฐ ๋ฐฉ๋ฒ๋ ์๊ตฐ์!โ TODO ์ง์ฐ ์๊ฐ์ด 0์ธ setTimeout์ผ๋ก ๊ฐ์ธ๋ฉด ์ค์ฒฉ์ด๋ฒคํธ๊ฐ ์ฆ์ ์ฒ๋ฆฌ๋์ง ์๋ ์ด์ ๋?..
setTimeout ์ ์ง์ฐ์๊ฐ์ด 0 ์ด๋ผ๊ณ ํ๋๋ผ๋, ๋น๋๊ธฐ ํจ์์ด๋ฉฐ, ํ์ ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ ์ฆ์ ์ฒ๋ฆฌ๋์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ 0์ ์ต์ ๋๊ธฐ ์๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์์ ๋ค์ ๋ฐ๋ ค ๋ ์ง์ฐ๋ ์ ์์ต๋๋ค ! https://evan-moon.github.io/2019/08/01/nodejs-event-loop-workflow/