JavaScript

JS 7일차

Zㅣ존수빈zz 2022. 12. 27. 03:37

# Accordion

<style>
	.max-h-0 {
		max-height: 0;
	}
	.max-h-40 {
		max-height: 10rem;
	}
</style>
 
<div class="container">
	<button onclick="f(this)">Tab</button>
	<div class="item max-h-0">
		<p>Lorem ipsum dolor sit amet consectetur adipisicing elit.</p>
	</div>
</div>

<script>
	function f(el) {
		console.log(el);

		const item = el.nextElementSibling;
            
		item.classList.toggle('max-h-0');
		item.classList.toggle('max-h-40');  // toggle: 있는 것을 빼고 없는 것을 집어넣는다
		console.log(item)
	}
</script>

- 버튼을 클릭했을 때(onclick) 함수 f의 argument를 this로 둠으로서 js에서의 el은 button이 된다.

- 그리고 다시 item을 el의 바로 다음 element인 div로 선언한다

- toggle을 통해 div의 크기를조절할 수 있도록 한다.


# Accordion 2

    <style>
        button {
            border: none;
            background-color: transparent;
            padding: 0.5rem;
            font-weight: bold;
            cursor: pointer;
        }
        .hidden {
            display: none;
        }
        .active {
            border-bottom: 2px solid #333;
        }
    </style>

    <div class="">
        <button id="default" onclick="f(event, 'b0')">Guinness</button>
        <button onclick="f(event, 'b1')">Heineken</button>
        <button onclick="f(event, 'b2')">Budwiser</button>
    </div>

    <div class="container">
        <div id="b0" class="beer">
            <h3>Guinness</h3>
            <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Maiores molestiae, quia cum modi sit suscipit qui harum rerum odit. Ipsam vero magni, quae velit officiis ea repellat placeat fugiat iste?</p>
        </div>

        <div id="b1" class="beer">
            <h3>Heineken</h3>
            <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Maiores molestiae, quia cum modi sit suscipit qui harum rerum odit. Ipsam vero magni, quae velit officiis ea repellat placeat fugiat iste?</p>
        </div>
        <div id="b2" class="beer">
            <h3>Budwiser</h3>
            <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Maiores molestiae, quia cum modi sit suscipit qui harum rerum odit. Ipsam vero magni, quae velit officiis ea repellat placeat fugiat iste?</p>
        </div>
    </div>

    <script>
        function f(e, id) {
            console.log(e);     // event 객체
            console.log(e.target);  //button
            console.log(id);

            // # 컨텐츠 활성화
            let beers = document.getElementsByClassName('beer');

            // 모든 beer클래스를 안보이게 한다
            for(let i=0; i<beers.length; i++) {
                beers[i].classList.add('hidden');
            }

            // id에 일치하는 beer만 보이게 한다
            let beer = document.getElementById(id);
            beer.classList.remove('hidden');

            // # 버튼 활성화
            let buttons = document.querySelectorAll('button');

            // 모든 버튼에서 border 제거
            for(let i=0; i<buttons.length; i++) {
                buttons[i].classList.remove('active');
            }

            // 선택한 버튼만 border 활성화
            e.target.classList.add('active');
        }

        // 페이지 처음 로드되었을 때 (새로고침) 실행한다
        document.getElementById('default').click();
    </script>

- 선택한 컨텐츠만 효과를 적용하고 싶다면, for문을 이용하여 전체에 적용하고 해당 컨텐츠만 제거하거나, 전체에서 제거한 후 해당 컨텐츠만 다시 적용하는 방법을 사용한다.