JavaScript
JavaScript <event 갤러리>
wlals5855
2024. 6. 11. 23:30
JavaScript event
버튼을 클릭하면 이미지가 다크모드로 변경되고 이미지를 클릭하면 메인이미지를 출력하도록 event를 사용합니다.
⭐HTML
<h1>Image Gallery Practice</h1>
<!-- -->
<div class="full-img">
<img src="images/cat01.jpg" alt="대표썸네일" class="displayed-img" />
<!-- 다크 모드를 위한 img 태그 위의 div -->
<div class="overlay"></div>
<button class="dark">다트모드</button>
</div>
<div class="thumb-bar">
<!-- 썸네일을 위한 요소 -->
<img src="images/cat01.jpg" alt="" />
<img src="images/cat02.jpg" alt="" />
<img src="images/dog01.jpg" alt="" />
<img src="images/dog02.jpg" alt="" />
<img src="images/dog03.jpg" alt="" />
</div>
⭐JavaScript
const thumbBar = document.querySelector('.thumb-bar');
const displayedImage = document.querySelector('.displayed-img');
const btn = document.querySelector('button');
const overlay = document.querySelector('.overlay');
- 먼저 querySelector를 사용해 전체 이미지 요소와 버튼, 오버레이를 선택합니다.
const images = [
"cat01.jpg",
"cat02.jpg",
"dog01.jpg",
"dog02.jpg",
"dog03.jpg",
];
const alts = {
"cat01.jpg": "고양이1",
"cat02.jpg": "고양이2",
"dog01.jpg": "강아지1",
"dog02.jpg": "강아지2",
"dog03.jpg": "강아지3",
};
- 들어갈 이미지 파일 이름 배열 선언한 후 이미지에 대한 대체 텍스트를 저장하는 객체 선언합니다.
thumbBar.addEventListener('click', function(e) {
if(e.target.tagName === 'IMG') {
const imgSrc = e.target.src;
displayedImage.src = imgSrc;
displayedImage.alt = alts[imgSrc.split('/').pop()]
}
})
- 썸네일 바에 이벤트 리스너 추가를 추가합니다.
- 클릭된 요소가 이미지일 경우 displayedImgae의 src와 alt를 업데이트합니다.
- 이미지 파일 이름 추출 및 대체 텍스트 설정합니다.
See the Pen Untitled by als5855 (@als5855) on CodePen.
- 다음은 버튼을 클릭해 다크모드 라이트 모드를 만듭니다.
btn.addEventListener('click', function() {
if (btn.classList.contains('dark')) {
//다크모드에서 라이트목
btn.textContent = '라이트모드';
overlay.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';
btn.classList.remove('dark');
} else{
btn.textContent = '다크모드';
overlay.style.backgroundColor = 'rgba(0, 0, 0, 0)'
btn.classList.add('dark');
}
})
- btn에 'dark'클래스가 포함되면 이벤트가 실행되도록 btn.classList.contains('dark')를 if의 조건으로 설정한다.
- btn을 클릭하면 버튼은 다크모드에서 라이트모드로 내용이 바꿀 수 있도록 textContent를 사용합니다.
- overaly는 background 컬러가 적용되 미리 만들어 둔 overaly에 반투명한 스크린이 생긴다.
- btn에서 "dark"클래스가 없어지면서 라이트모드가 됩니다.
- 라이트모드에서는 else에서의 내용 처럼 라이트모드에서 btn클릭시 'dark'클래스가 다시 생기면서
다크모드로 전환됩니다.