└ 폴더 구조
└ 년/월 선택
└ 선택시 보여지는 화면
└ 해당하는 년/월에 저장된 이미지가 없을 경우
<input
type="month"
id="calendar"
name="calendar"
onchange="imgSelector(this.id)"
/><br />
<label id="emptyImg">이미지가 존재하지 않습니다.</label>
<div class="imgGroup" id="2021-12">
<img src="image/2021/12/KakaoTalk_20220111_144937222.jpg" alt="2021_12_img_0" />
<img src="image/2021/12/KakaoTalk_20220111_144937222_01.jpg" alt="2021_12_img_1" />
...
</div>
<div class="imgGroup" id="2021-11">
...
</div>
...
<input>
으로 선택된 년/월 값을 받아서 해당하는 년/월을 <div>
의 id 값으로 매칭<div>
를 보여주는 것을 on/off 하는 방식으로 구성.imgGroup {
margin: 0 auto;
height: 130px;
width: 90vw;
white-space: nowrap;
overflow-x: scroll;
display: none;
}
/* white-space: nowrap; -> 해당하는 요소의 줄바꿈 x */
/* overflow-x: scroll; -> 수평 스크롤 */
div img{
height: 100px;
width: 200px;
object-fit: scale-down;
display: inline-block;
}
<div>
를 display:none
<div>
의 id가 있을 시 display:block
으로 변경const imgSelector = id => {
let groups = document.getElementsByClassName('imgGroup');
Array.from(groups).forEach((element) => {
element.style.display = 'none';
});
document.getElementById('emptyImg').style.display = 'none';
let selectedImg = document.getElementById(document.getElementById(id).value);
if (selectedImg) selectedImg.style.display = 'block';
else document.getElementById('emptyImg').style.display = 'block';
};
<div>
즉, 이미지를 가지고 있는 <div>
들을 받아옴<div>
들을 모두 display:none
으로 초기화<div>
의 id가 있을 시 display:block
으로 변경let groups = document.getElementsByClassName('imgGroup');
Array.from(groups).forEach((element) => {
element.style.display = 'none';
});
여기서
groups
는 type이 Array가 아닌 HTMLCollection 즉, 유사 배열 객체(array-like object)이기 때문에 foreach 문을 사용하기 위해Array.from(groups).forEach()
로 유사 배열 객체를 배열로 얕게 복사하여 foreach()를 사용했다.