https://danji-ya.github.io/JS_javascript30/10-HoldShitandCheckboxes/
const checkboxes = document.querySelectorAll("input[type=checkbox]");
let lastCheckedItem = undefined;
[...checkboxes].map(checkbox => checkbox.addEventListener("click", e => {
let isStart = false;
if(e.shiftKey && e.target.checked) {
if(!lastCheckedItem) return;
[...checkboxes].map(checkbox => {
if(checkbox === lastCheckedItem || checkbox === e.target) {
isStart = !isStart;
}
if(isStart) checkbox.checked = true;
});
}
lastCheckedItem = e.target;
}));
lastCheckedItem
는 제일 마지막에 체크 한 item을 기억하게 하고 각 이벤트 리스너마다 이 값을 공유하며,
isStart
는 클릭 될 때마다 초기화시켜 일반 체크와 shift를 누른 체크 사이의 값을 판단할 수 있었다.
+
infinite Carousel(slider) 구현 시,
처음 방식:.
좌우 움직일 때마다, 마지막 요소를 해당 방향 마지막에 insertAdjacentElement
방식을 이용하여 붙여서 작동되게 하였음. 하지만, dot을 이용한 움직임 시, 건너 뛴 만큼 붙여야하기 때문에 다른 방식을 이용하였음
두번째 방식:
기본 slider 좌, 우측 맨 끝에 cloned element를 붙여 맨 끝에서 반대편 이동 시 바로 옆 복사한 요소로 이동하는 동시에 transition을 none으로 하여 그동안 반대편으로 이동하게끔 하였다. 이 방식을 이용하니 dot을 이용한 움직일 때, 간단하게 index만 이용하여 움직일 수 있었다.
추가적으로 맨 끝에서 반대편 이용 시에만 해당 transition이 완료 될 때까지 중복 클릭을 방지시켜 자연스러운 움직임을 구현하였다.
https://danji-ya.github.io/JS_javascript30/00-infiniteCarousel/