JavaScript

(Javascript) : 슬라이드 패널 작성하기

요리하다그만둠 2022. 7. 11. 17:01
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>javascript slide panel demo</title>
<script>
// 슬라이드 패널 작성하기
window.onload = function() {
   
    // 패널 펼침/접기 상태 변수 설정 (변수명 : panel_status)
    // 상태 값 : 접기(folded), 펼침(spread) (문자열)
    // 초기상태 : 접힌 상태(folded) (문자열)
 
   
    // 패널 펼치기 버튼 (변수명 : panel_spreading_btn)
 
   
    // 패널 (panel)
 
   
    // 패널(레이어) 크기/배경색  CSS 속성 설정
    // 길이 : 0
    // 높이 : 300px
    // 배경색 : cyan
 
   
   
   
    // 패널 넘침 방지 속성(overflow) 설정(hidden)
    // : 레이어 내용이 레이어 크기보다 클 경우 대처 속성
    // 미설정시 접기 버튼이 의도하지 않게 출력됨.
 
   
    // 패널 트랜지션(모양 변형) 초기 속성 설정
    // 변경할 속성 : 너비(width)
    // 지연시간(delay) : 0.1초
    // 지속시간(duration) : 0.5초
 
   
   
   
    // 패널 접기 버튼 (변수명 : panel_folding_btn)
 
   
    // 패널 헤더 (변수명 : panel_header)
 
   
    // 패널 헤더내 내용물 정렬 설정 (ex. 버튼(접기 버튼) 등)  : 우측 정렬
 
   
    // 패널 펼치기 버튼(panel_spreading_btn)을 클릭시 이벤트 핸들러
    panel_spreading_btn.onclick = function(e) {
       
        // 패널 상태 점검(펼침/접기)
        // 접힘(folded) 상태일 때만 너비가 "300px"로 변경되도록 설정.
        // 부가적으로 패널 상태 변수는 펼침(spread)로 재설정 조치.
        // : 이렇게 해야 제대로 슬라이드 패널 기능(토글 기능)이 활성화됨.
        // 트랜지션 변경이 이미 위에서 설정되어 있으므로
        // 자연스럽게 슬라이드 트랜지션(변형) 효과(천천히 펼쳐지는 효과) 발생함.
       
       
       
    }; //
   
    // 패널 접기 버튼(panel_folding_btn)을 클릭시 이벤트 핸들러
    // 위와 동일한 요령으로 이벤트 처리 : 위와 구문을 반대로 설정함.
    panel_folding_btn.onclick = function(e) {
       
        // 패널 상태 점검(펼침/접기)
       
       
    }; //
   
};
</script>
</head>
<body>
 
    <!-- 패널 펼치기 버튼 -->
    <button id="panel_spreading_btn">▶</button>
   
    <!-- 패널 -->
    <div id="panel">
        <div id="panel_header">
            <button id="panel_folding_btn">X</button>
        </div>
        <div id="panel_content">
        </div>
    </div>
 
</body>
</html>

답안

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>javascript slide panel demo</title>
<script>
// 슬라이드 패널 작성하기
window.onload = function() {
	
	// 패널 펼침/접기 상태 변수 설정 (변수명 : panel_status)
	// 상태 값 : 접기(folded), 펼침(spread) (문자열)
	// 초기상태 : 접힌 상태(folded) (문자열)
	var panel_status = "folded";
	
	// 패널 펼치기 버튼 (변수명 : panel_spreading_btn)	
	var panel_spreading_btn = document.getElementById("panel_spreading_btn");
	
	// 패널 (panel)
	var panel = document.getElementById("panel");
	
	// 패널(레이어) 크기/배경색  CSS 속성 설정
	// 길이 : 0
	// 높이 : 300px
	// 배경색 : cyan
	panel.style.width = "0";
	panel.style.height = "300px";
	panel.style.backgroundColor = "cyan";
	
	// 패널 넘침 방지 속성(overflow) 설정(hidden) 
	// : 레이어 내용이 레이어 크기보다 클 경우 대처 속성
	// 미설정시 접기 버튼이 의도하지 않게 출력됨.	
	panel.style.overflow = "hidden"; 
	
	// 패널 트랜지션(모양 변형) 초기 속성 설정
	// 변경할 속성 : 너비(width)
	// 지연시간(delay) : 0.1초
	// 지속시간(duration) : 0.5초
	panel.style.transitionProperty = "width";
	panel.style.transitionDelay = ".1s";
	panel.style.transitionDuration = ".5s";
	
	// 패널 접기 버튼 (변수명 : panel_folding_btn)
	var panel_folding_btn = document.getElementById("panel_folding_btn");
	
	// 패널 헤더 (변수명 : panel_header)
	var panel_header = document.getElementById("panel_header");
	
	// 패널 헤더내 내용물 정렬 설정 (ex. 버튼(접기 버튼) 등)  : 우측 정렬
	panel_header.style.textAlign = "right"; 
	
	// 패널 펼치기 버튼(panel_spreading_btn)을 클릭시 이벤트 핸들러
	panel_spreading_btn.onclick = function(e) {
		
		// 패널 상태 점검(펼침/접기)
		// 접힘(folded) 상태일 때만 너비가 "300px"로 변경되도록 설정.
		// 부가적으로 패널 상태 변수는 펼침(spread)로 재설정 조치.
		// : 이렇게 해야 제대로 슬라이드 패널 기능(토글 기능)이 활성화됨.
		// 트랜지션 변경이 이미 위에서 설정되어 있으므로 
		// 자연스럽게 슬라이드 트랜지션(변형) 효과(천천히 펼쳐지는 효과) 발생함.
		if (panel_status == "folded") {
			panel.style.width = "300px";	
			panel_status = "spread";
		} //
		
	}; //
	
	// 패널 접기 버튼(panel_folding_btn)을 클릭시 이벤트 핸들러
	// 위와 동일한 요령으로 이벤트 처리 : 위와 구문을 반대로 설정함.
	panel_folding_btn.onclick = function(e) {
		
		// 패널 상태 점검(펼침/접기)
		if (panel_status == "spread") {
			panel.style.width = "0";	
			panel_status = "folded";
		} //
		
	}; //
	
};
</script>
</head>
<body>

	<!-- 패널 펼치기 버튼 -->
	<button id="panel_spreading_btn">▶</button>
	
	<!-- 패널 -->
	<div id="panel">
		<div id="panel_header">
			<button id="panel_folding_btn">X</button>
		</div>
		<div id="panel_content">
		</div>
	</div>

</body>
</html>

항상 오타조심..