Language/JavaScript (WEB)

๐ŸŒ ๋ธŒ๋ผ์šฐ์ € Resize ์ด๋ฒคํŠธ ์ตœ์ ํ™” ํ•˜๊ธฐ

์ธํŒŒ_ 2022. 3. 22. 10:56

๋ธŒ๋ผ์šฐ์ €-resize-์ด๋ฒคํŠธ

Window Resize Event

 

๋ธŒ๋ผ์šฐ์ € & ์œˆ๋„์šฐ ํ™”๋ฉด ๋†’์ด / ๋„ˆ๋น„ ๊ตฌํ•˜๋Š” ๋ฒ•

window.innerWidth; // ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์˜ ๋„ˆ๋น„
window.innerHeight; // ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์˜ ๋†’์ด
window.outerWidth; // ๋ธŒ๋ผ์šฐ์ € ์ „์ฒด์˜ ๋„ˆ๋น„
window.outerHeight; // ๋ธŒ๋ผ์šฐ์ € ์ „์ฒด์˜ ๋†’์ด
 

[JS] ๐Ÿ“š ๋ธŒ๋ผ์šฐ์ € & ์œˆ๋„์šฐ ํ™”๋ฉด - ๋†’์ด/๋„ˆ๋น„ ๊ตฌํ•˜๊ธฐ

ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €) ๋†’์ด/๋„ˆ๋น„ ๊ตฌํ•˜๊ธฐ ํ‘œ์ค€์ด ์•„๋‹Œ ๋ฐฉ๋ฒ•๋“ค๋กœ ํ•ด๋ณด๋‹ˆ ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์ธ์‹์ด ์ด์ƒํ•˜๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์ œ์ผ ํ™•์‹คํ•œ ๋ฐฉ๋ฒ•์€ screen ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ HTML5 ํ‘œ์ค€์„

inpa.tistory.com


๋ธŒ๋ผ์šฐ์ € 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-์ด๋ฒคํŠธ

์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด๋ณด๋ฉด ์›€์งค ์‚ฌ์ง„์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด, ๋งค 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-์ด๋ฒคํŠธ

๋ธŒ๋ผ์šฐ์ € ์ฐฝ์„ ๋Š˜๋ฆฌ๊ณ  ์ค„์ผ๋•Œ๋งˆ๋‹ค ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  resize๋ฅผ ๋งˆ์น˜๋ฉด ์ข€ ์žˆ๋‹ค๊ฐ€ ์ด๋ฒคํŠธ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

timer์— setTimeout ๋ฉ”์†Œ๋“œ๋กœ 0.3๋งˆ๋‹ค ์ฝ˜์†”์„ ์ฐ๊ฒŒ ํ•ด๋†จ๋Š”๋ฐ 0.3์ดˆ๊ฐ€ ์ง€๋‚˜๊ธฐ์ „ resize์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ๋˜๋ฉด ๊ณ„์† timer๊ฐ’์ด ๊ณ„์† ๋ฎํžˆ๋Š” ๊ฒƒ์ด๋‹ค.

resize ์ด๋ฒคํŠธ๋Š” ์˜ค์ง window ๊ฐ์ฒด(document.defaultView)์—์„œ๋งŒ ๋ฐœ์ƒ๋œ๋‹ค.
๊ทธ๋ž˜์„œ ๋งŒ์ผ ๋ธŒ๋ผ์šฐ์ €์˜ ํญ์ด ์•„๋‹Œ DOM์˜ ์—˜๋ฆฌ๋จผํŠธ ์š”์†Œ์˜ ํญ resize ์ด๋ฒคํŠธ ์•Œ๋ฆผ์„ ๋ฐ›๊ธธ ์›ํ•œ๋‹ค๋ฉด, resize ์ด๋ฒคํŠธ ํ•ธ๋“ค์–ด๊ฐ€ ์•„๋‹Œ Resize Observer ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ์•ผ ํ•œ๋‹ค.