๐ŸŸจ JavaScript/๊ฐœ๋…

    [์ฝ”๋”ฉ์• ํ”Œ,mdn ๋“ฑ] ์ด๋ฒคํŠธ๋ฒ„๋ธ”๋ง๊ณผ ์ด๋ฒคํŠธ์บก์ณ๋ง ๋ฐ ๊ด€๋ จ ์œ ์šฉํ•œ ํ•จ์ˆ˜๋“ค

    ์ด๋ฒคํŠธ๊ฐ€ DOMํŠธ๋ฆฌ๋ฅผ ํƒ€๊ณ  ๋ฐœ์ƒํ•˜๋Š” ํ๋ฆ„ ์ด๋ฒคํŠธ๋Š” document์—์„œ ์‹œ์ž‘ํ•ด DOM ํŠธ๋ฆฌ๋ฅผ ๋”ฐ๋ผ event.target๊นŒ์ง€ ๋‚ด๋ ค๊ฐ„๋‹ค. ์ด๋ฒคํŠธ๋Š” ํŠธ๋ฆฌ๋ฅผ ๋”ฐ๋ผ ๋‚ด๋ ค๊ฐ€๋ฉด์„œ addEventListener(..., true)๋กœ ํ• ๋‹นํ•œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋™์ž‘์‹œํ‚ต๋‹ˆ๋‹ค. addEventListener(..., true)์˜ true๋Š” {capture: true}์˜ ์ถ•์•ฝํ˜•์ด๋‹ค. ์ดํ›„ ํƒ€๊นƒ ์š”์†Œ์— ์„ค์ •๋œ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. ์ดํ›„์—” ์ด๋ฒคํŠธ๊ฐ€ event.target๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ๋‹ค์‹œ ์ตœ์ƒ์œ„ ๋…ธ๋“œ๊นŒ์ง€ ์ „๋‹ฌ๋˜๋ฉด์„œ ๊ฐ ์š”์†Œ์— on๋กœ ํ• ๋‹นํ•œ ํ•ธ๋“ค๋Ÿฌ์™€ addEventListener๋กœ ํ• ๋‹นํ•œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋™์ž‘์‹œํ‚จ๋‹ค. addEventListener๋กœ ํ• ๋‹นํ•œ ํ•ธ๋“ค๋Ÿฌ ์ค‘, ์„ธ ๋ฒˆ์งธ ์ธ์ˆ˜๊ฐ€ ์—†๊ฑฐ๋‚˜ false, {capture: false}์ธ ํ•ธ๋“ค๋Ÿฌ๋งŒ ํ˜ธ์ถœ๋œ..

    [์ฝ”๋”ฉ์• ํ”Œ] ์š”์†Œ์˜ ๋†’์ด์™€ ์œ„์น˜๊ฐ’ ๊ตฌํ•˜๊ธฐ (clientHeight, offsetHeight, scrollHeight, getBoundingClientRect())

    clientHeight console.log(element.clientHeight); clientHeight๋Š” ํŒจ๋”ฉ์„ ํฌํ•จํ•œ ์š”์†Œ์˜ ๋†’์ด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. offsetHeight console.log(element.offsetHeight); clientHeight๋Š” ํŒจ๋”ฉ, ํ…Œ๋‘๋ฆฌ, ๊ฐ€๋กœ์Šคํฌ๋กค๋ฐ”(์žˆ๋Š” ๊ฒฝ์šฐ)์„ ํฌํ•จํ•œ ์š”์†Œ์˜ ๋†’์ด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. scrollHeight console.log(element.scrollHeight); scrollHeight๋Š” ํŒจ๋”ฉ, overflow๋กœ ์ธํ•ด ํ™”๋ฉด์— ํ‘œ์‹œ๋˜์ง€ ์•Š์€ ์ปจํ…์ธ ์„ ํฌํ•จํ•œ ์š”์†Œ์˜ ๋†’์ด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. getBoundingClientRect() console.log(element.getBoundingClientRect()); // ์ถœ๋ ฅ๊ฒฐ๊ณผ { top: 134 y: 134 ..

    [์ฝ”๋”ฉ์• ํ”Œ] ์Šคํฌ๋กค ์ด๋ฒคํŠธ

    ์Šคํฌ๋กค๋ฐ” ์œ„์น˜ ์ฐพ๊ธฐ : window.scrollY, window.scrollTop() window.addEventListener('scroll', function(){ console.log(window.scrollY); //window.pageYOffset๊ณผ ๋™์ผํ•œ ๊ธฐ๋Šฅ(์ด์ชฝ์ด ํ˜ธํ™˜์„ฑ์ด ๋” ๋–จ์–ด์ง) }) //jquery๋ฒ„์ „ $(window).on('scroll', function(){ $(window).scrollTop() //(100) ๊ด„ํ˜ธ์•ˆ์— ์ˆซ์ž๋ฅผ ๋„ฃ์œผ๋ฉด ํ˜„์žฌ์Šคํฌ๋กค๋ฐ” ์ด๋™ }); ๋” ์•Œ์•„๊ฐ€๊ธฐ : scrollTop์€ ํ˜„์žฌ ์Šคํฌ๋กค๋ฐ” ์ด๋™ ๊ธฐ๋Šฅ๋„ ๊ฒธํ•œ๋‹ค. ๊ฐ•์ œ๋กœ ๋งจ ์œ„์—์„œ๋ถ€ํ„ฐ ์Šคํฌ๋กคํ•˜๊ธฐ : scrollTo(x,y) window.addEventListener('scroll', function(){ wind..

    [๋“œ๋ฆผ์ฝ”๋”ฉ] ์ฝœ๋ฐฑํ•จ์ˆ˜ (4) : ์ฝœ๋ฐฑ์ง€์˜ฅ ํƒˆ์ถœ, Promise (callback hell ์ฝ”๋“œ๊ฐœ์„ ํ•˜๊ธฐ)

    Callback Hell ์˜ˆ์‹œ ์ด์ „์‹œ๊ฐ„์— ๋งŒ๋“ค์—ˆ๋˜ ์ฝœ๋ฐฑ์ง€์˜ฅ ์˜ˆ์‹œ๋‹ค. // ๊ธฐ๋ณธ์„ธํŒ… class UserStorage { loginUser(id, password, onSuccess, onError) { setTimeout(() => { if ( (id === 'master' && password === 'master00') || (id === 'submaster' && password === 'submaster00') ) { onSuccess(id); } else { onError(new Error('not found')); } }, 2000); } getRoles(user, onSuccess, onError) { setTimeout(() => { if (user === 'master') { onSucce..

    [๋“œ๋ฆผ์ฝ”๋”ฉ] ์ฝœ๋ฐฑํ•จ์ˆ˜ (3) : promise๋กœ Error Handlingํ•˜๊ธฐ (reject, catch ํ™œ์šฉ)

    Error Handling const turnonLaptop = () => new Promise((resolve, reject) => { setTimeout(() => resolve(`๋…ธํŠธ๋ถ ์‹คํ–‰.`), 1000); }); const loginBlog = blog => new Promise((resolve, reject) => { setTimeout(() => reject(new Error(`Error! ${blog} => ๋ธ”๋กœ๊ทธ ์ง„์ž….`)), 1000); }); const writePost = post => new Promise ((resolve, reject) => { setTimeout(() => resolve(`${post} => ๊ฒŒ์‹œ ์™„๋ฃŒ.`), 1000); }); producer ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ..

    [๋“œ๋ฆผ์ฝ”๋”ฉ] ์ฝœ๋ฐฑํ•จ์ˆ˜ (2) : ์ฝœ๋ฐฑ์ง€์˜ฅ ํƒˆ์ถœ, Promise (State, Producing)

    Promise Promise๋Š” javascript์— ๋‚ด์žฅ๋˜์–ด์žˆ๋Š” object๋กœ, ์ด๋ฅผ ํ†ตํ•ด์„œ ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ๋„คํŠธ์›Œํฌํ†ต์‹ ์„ ํ•œ๋‹ค๋˜์ง€, ํŒŒ์ผ์„ ์ฝ์–ด์˜จ๋‹ค๋˜์ง€ ํ•˜๋Š” ๋“ฑ์˜ ๋ฌด๊ฑฐ์šด ์ž‘์—…์„ ํ•  ๋•Œ๋Š” ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋ฏ€๋กœ Promise๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋ฌด๊ฑฐ์šด ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ๋„ ์ผ์–ด๋‚˜๋Š” ๋ถˆํ•„์š”ํ•œ ๋„คํŠธ์›Œํฌํ†ต์‹ (promiseํ•จ์ˆ˜์˜ ์‹คํ–‰)์„ ๋ฐฉ์ง€ํ•ด์•ผ ํ•œ๋‹ค. new Promise๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ์ˆœ๊ฐ„, ํ•ด๋‹น executor ํ•จ์ˆ˜๊ฐ€ ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋ฏ€๋กœ ์ฃผ์˜ํ•˜์ž. promise๋Š” ์•„๋ž˜ ๋‘ ๊ฐ€์ง€๋ฅผ ์—ผ๋‘์— ๋‘๋ฉด ์ข‹๋‹ค. 1. State(์ƒํƒœ) process๊ฐ€ ๋ฌด๊ฑฐ์šด operation์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋Š”์ง€/์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด ์„ฑ๊ณตํ–ˆ๋Š”์ง€/์‹คํŒจํ–ˆ๋Š”์ง€์˜ ์ƒํƒœ pending : operation์„ ์ˆ˜ํ–‰ ์ค‘์ธ ์ƒํƒœ ..