๐ ๋ธ๋ผ์ฐ์ Resize ์ด๋ฒคํธ ์ต์ ํ ํ๊ธฐ
Window Resize Event
๋ธ๋ผ์ฐ์ & ์๋์ฐ ํ๋ฉด ๋์ด / ๋๋น ๊ตฌํ๋ ๋ฒ
window.innerWidth; // ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋๋น
window.innerHeight; // ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋์ด
window.outerWidth; // ๋ธ๋ผ์ฐ์ ์ ์ฒด์ ๋๋น
window.outerHeight; // ๋ธ๋ผ์ฐ์ ์ ์ฒด์ ๋์ด
๋ธ๋ผ์ฐ์ resize ์ด๋ฒคํธ ์ต์ ํ
window์ resize ์ด๋ฒคํธ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฉด ๋ธ๋ผ์ฐ์ ์ฐฝ ๋ฆฌ์ฌ์ด์ง์๋ง๋ค ์ฝ๋ฐฑ ์ฝ๋๊ฐ ์คํ๋๋ค. ์๋์ ์ผ๋ก ๋งค resize๋ง๋ค ์ฝ๋๋ฅผ ์คํํด์ผ ํ๋ ๊ฒฝ์ฐ๋ ์๊ฒ ์ง๋ง, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ๋ผ๋ฉด ์ด๋ ๋งค์ฐ ๋นํจ์จ์ ์ด๊ณ ๋ธ๋ผ์ฐ์ ์ ๊ณผ๋ถํ๋ฅผ ์ค ์๋ ์๋ค.
// Javascript
window.addEventListener('resize', function(){
console.log('resize event!');
if (window.innerWidth <= 800) {
alert('ํ์ฌ ๋ธ๋ผ์ฐ์ ํฌ๊ธฐ๊ฐ <= 800px');
}
});
// jQuery
$(window).on('resize', function(){
console.log('resize event!');
if (window.innerWidth <= 800) {
alert('ํ์ฌ ๋ธ๋ผ์ฐ์ ํฌ๊ธฐ๊ฐ <= 800px');
}
});
์ฝ๋๋ฅผ ์คํํด๋ณด๋ฉด ์์งค ์ฌ์ง์์ ๋ณผ ์ ์๋ฏ์ด, ๋งค resize์๋ง๋ค ์ด๋ฒคํธ๊ฐ ์คํ๋๋ค.
๋ณดํต ๋ฆฌ์ฌ์ด์ง ์ด๋ฒคํธ๋ฅผ ๊ฑธ์ด๋๋ ์ด์ ๋ ํ์ฌ ๋ธ๋ผ์ฐ์ ์ฐฝ ๊ฐ๋กํญ ๊ธธ์ด๋ฅผ ๊ตฌํด ๊ทธ์ ๋ฐ๋ฅธ ๋ฐ์ํ์ ๊ตฌํํ๊ธฐ ์ํจ์ด๋ค. ๋ฐ๋ผ์ ๋ธ๋ผ์ฐ์ ์ฐฝ์ ๋ฆฌ์ฌ์ด์ง ํ ๋๋ง๋ค ์ด๋ฒคํธ ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒ์ด ์๋, ๋ธ๋ผ์ฐ์ ์ฐฝ ๋๋ฆฌ๊ธฐ๋ฅผ ๋๋ธ ๋ค์ ์ด๋ฒคํธ๋ฅผ ์คํํ ๋ก ํ๋ฉด ๋ณด๋ค ์ต์ ํ๋ ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑํ ์ ์์ ๊ฒ์ด๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ ๊ฐ์ฅ ๊ฐ๋จํ๊ฒ ์ฌ์ฉํ๊ธฐ ์ข์ setTimeout ๋ฉ์๋๋ฅผ ์ด์ฉํด ์ต์ ํ๋ฅผ ์ํค๋ ๋ฐฉ๋ฒ์ ์๊ฐํด ๋ณธ๋ค.
let delay = 300;
let timer = null;
// Javascript
window.addEventListener('resize', function(){
clearTimeout(timer);
timer = setTimeout(function(){
console.log('resize event!');
if (window.innerWidth <= 800) {
alert('ํ์ฌ ๋ธ๋ผ์ฐ์ ํฌ๊ธฐ๊ฐ <= 800px');
}
}, delay);
});
// jQuery
$(window).on('resize', function(){
clearTimeout(timer);
timer = setTimeout(function(){
console.log('resize event!');
if (window.innerWidth <= 800) {
alert('ํ์ฌ ๋ธ๋ผ์ฐ์ ํฌ๊ธฐ๊ฐ <= 800px');
}
}, delay);
});
๋ธ๋ผ์ฐ์ ์ฐฝ์ ๋๋ฆฌ๊ณ ์ค์ผ๋๋ง๋ค ์ฝ๋๊ฐ ์คํ๋์ง ์๊ณ resize๋ฅผ ๋ง์น๋ฉด ์ข ์๋ค๊ฐ ์ด๋ฒคํธ ์ฝ๋๊ฐ ์คํ๋๋ ๊ฑธ ๋ณผ ์ ์๋ค.
timer์ setTimeout ๋ฉ์๋๋ก 0.3๋ง๋ค ์ฝ์์ ์ฐ๊ฒ ํด๋จ๋๋ฐ 0.3์ด๊ฐ ์ง๋๊ธฐ์ resize์ด๋ฒคํธ๊ฐ ๋ฐ์๋๋ฉด ๊ณ์ timer๊ฐ์ด ๊ณ์ ๋ฎํ๋ ๊ฒ์ด๋ค.
resize ์ด๋ฒคํธ๋ ์ค์ง window ๊ฐ์ฒด(document.defaultView)์์๋ง ๋ฐ์๋๋ค.
๊ทธ๋์ ๋ง์ผ ๋ธ๋ผ์ฐ์ ์ ํญ์ด ์๋ DOM์ ์๋ฆฌ๋จผํธ ์์์ ํญ resize ์ด๋ฒคํธ ์๋ฆผ์ ๋ฐ๊ธธ ์ํ๋ค๋ฉด, resize ์ด๋ฒคํธ ํธ๋ค์ด๊ฐ ์๋ Resize Observer ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ์ผ ํ๋ค.