ํ•ด๋ฒ„๋‹ˆ 2024. 11. 14. 09:58
๋ฐ˜์‘ํ˜•

 

๋ฌธ์ œ 

ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋  ๋•Œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ์ด๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ๊ทธ ๊ธธ์ด์— ๋งž์ถฐ textarea์˜ ๋†’์ด๋ฅผ ์ž๋™์œผ๋กœ ์กฐ์ •ํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค. 

window.onload = function(){
    // ๊ธฐ์กด ๋†’์ด๋ฅผ auto๋กœ ์„ค์ •ํ•˜์—ฌ ๋†’์ด๋ฅผ ์ƒˆ๋กœ ๊ณ„์‚ฐํ•˜๋„๋ก ํ•จ
	textarea.style.height = 'auto';
	// ์ƒˆ๋กœ์šด ๋†’์ด ์„ค์ •
	textarea.style.height = `${textarea.scrollHeight + 3}px`; // ํ•„์š” ์‹œ ์—ฌ์œ  3px ์ถ”๊ฐ€
}

 

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•ด๋„ scrollHeight๊ฐ€ 0์œผ๋กœ ๊ณ„์‚ฐ๋˜์–ด ๋†’์ด๊ฐ€ ์ œ๋Œ€๋กœ ์กฐ์ •๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

 

 

 

 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• 

๋กœ๋“œ๋  ๋•Œ scrollHeight์„ ๊ตฌํ•˜๋Š” ๊ฒŒ ์•„๋‹Œ, ํƒญ์ด ์ „ํ™˜๋  ์‹œ scrollHeight์„ ๊ตฌํ•˜๋„๋ก ํ•˜์˜€๋‹ค.

 

 

1) setTimeout ์ฝœ๋ฐฑํ•จ์ˆ˜ ์‚ฌ์šฉ

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด setTimeout ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์ง€์—ฐ์„ ์ฃผ์–ด ๋ณด์•˜๊ณ , 1500ms ์ด์ƒ์œผ๋กœ ์„ค์ •ํ–ˆ์„ ๋•Œ ๊ฐ„ํ˜น ๋†’์ด๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๊ณ„์‚ฐ๋˜๊ธฐ๋„ ํ–ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ 1500์œผ๋กœ ์ฃผ๊ธฐ์—” ๋„ˆ๋ฌด ๋Š๋ฆฐ ์†๋„์˜€๋‹ค.

์œก์•ˆ์œผ๋กœ textarea์˜ ํญ์ด ๋ณ€ํ•˜๋Š”๊ฒŒ ๋‹ค ๋ณด์˜€๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์—ฌ์ „ํžˆ ์•ˆ์ •์ ์ด์ง€ ์•Š์•„, ์›์ธ์„ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด์•˜๋‹ค.

 

 

2) ํƒญ ์ „ํ™˜์‹œ textarea height auto๋กœ ๊ตฌํ•˜๊ธฐ

๊ทธ๋Ÿฌ๋˜ ์ค‘, ์šฐ์—ฐํžˆ ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์—, ๋‘ ๋ฒˆ์งธ ํƒญ์œผ๋กœ ์ „ํ™˜ํ•˜๋ฉด textarea์˜ ๋†’์ด๊ฐ€ ์ •ํ™•ํžˆ ๊ณ„์‚ฐ๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.

๋ฐ˜๋ฉด, ์ฒซ ๋ฒˆ์งธ ํƒญ์— ๊ณ„์† ๋จธ๋ฌผ๋Ÿฌ์žˆ์œผ๋ฉด ์—ฌ์ „ํžˆ 0์œผ๋กœ ๊ณ„์‚ฐ๋˜์—ˆ๋‹ค.

 

 

์ฒซ ๋ฒˆ์งธ ํƒญ์— ๋จธ๋ฌผ๋Ÿฌ์žˆ๋˜ ๊ฒฝ์šฐ)

 

 

 

๋‘ ๋ฒˆ์งธ ํƒญ์— ๋จธ๋ฌผ๋Ÿฌ์žˆ๋˜ ๊ฒฝ์šฐ)

 

 

 

function openTab(tabName){
    // ํƒญ ์—ด๊ธฐ 
    
    // ๋งŒ์•ฝ ๋‘ ๋ฒˆ์งธ ํƒญ์ด๋ผ๋ฉด textarea ๋†’์ด ์กฐ์ ˆ ํ•˜๋Š” ํ•จ์ˆ˜ ์‹คํ–‰ํ•˜๊ธฐ 
    if(tabName ==='tab2'){
        adjustTextareaHeightForAll();
    }
}

function adjustTextareaHeightForAll(){
    // .. ์ƒ๋žต .. 
    const textarea = document.querySelectorAll('[id*="desc"]');
    textarea.style.height = 'auto';
    textarea.style.height = `\${textarea.scrollHeight + 3}px`;  
}

 

๋”ฐ๋ผ์„œ ๋‘ ๋ฒˆ์งธ ํƒญ์„ ๋ˆŒ๋ €์„ ๋•Œ textarea์˜ ๋†’์ด๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ–ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋‹ˆ ๋ฌธ์ œ์—†์ด ๋†’์ด๊ฐ€ ์ œ๋Œ€๋กœ ์กฐ์ •๋˜์—ˆ๋‹ค.

 

 

 

 

 

onload ์‹œ์— ๋†’์ด๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉด ์™œ ์•ˆ ๋˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค.

DOM์ด ์™„์ „ํžˆ ๋กœ๋“œ๋˜์ง€ ์•Š์•„์„œ ์ƒ๊ธด ๋ฌธ์ œ์ธ์ง€, ๋‹ค๋ฅธ ์ด์œ ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š๋‹ค.

์•„๋งˆ ๊ธฐ๋ณธ์ด Tab1์ด๋ผ Tab1์€ ๋‚ด์šฉ์ด ํ‘œ์‹œ๊ฐ€ ๋˜๋Š” ๋ฐ˜๋ฉด, Tab2๋Š” ๋‚ด์šฉ์ด ํ‘œ์‹œ๋˜๊ธฐ ์ „์ธ ์ƒํƒœ์ด๋‹ค.

์ด ์ƒํ™ฉ์—์„œ height์„ ์žก์œผ๋ ค๊ณ  ํ•˜๋‹ˆ 0์ด ๋œฌ ๊ฒƒ ๊ฐ™๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ํด๋ฆญํ•˜์ง€ ์•Š์œผ๋ฉด ๋‚ด์šฉ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ onload ์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๋ณด๋‹จ, Tab ์ „ํ™˜์‹œ์— ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋ฐ”๋žŒ์งํ•ด๋ณด์ธ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•