<script>
const slider = document.querySelector('.items');
let isDown;
let startX;
let scrollLeft;
function start(e) {
isDown = true;
slider.classList.add('active');
startX = e.pageX - slider.offsetLeft;
scrollLeft = slider.scrollLeft;
}
function stop() {
isDown = false;
slider.classList.remove('active');
}
function sliding(e) {
if (!isDown) return;
//mouse가 이동하면서 startX로부터 멀어저가는 값을 측정하기 위하여 변수 x를 생성
const x = e.pageX - slider.offsetLeft;
//여기서 walk가 최초 시작점(startX)부터 mouse가 움직인 px 값차이를 의미
const walk = x - startX;
//슬라이드 이동은 scrollLeft의 값과 반대로 증감해야하므로 - 부호 붙임
//scollLeft 값은 최초 클릭했을 당시의 값을 저장해둔 것임, -=으로 하면 급격히 스크롤되는 오류 발생
slider.scrollLeft = scrollLeft - walk;
console.log(slider.scrollLeft);
}
slider.addEventListener('mousedown', start);
slider.addEventListener('mouseleave', stop);
slider.addEventListener('mouseup', stop);
slider.addEventListener('mousemove', sliding);
</script>
다른 코드와 연결할 때 매개(medium)이 필요한데, 예를 들어 boolean 변수를 외부에 설정해두고, 하위의 다른 function들에서 공유하게 되는 방식으로 가능
e.pageX는 margin을 고려하지 않은 전체 페이지 기준으로 x좌표이고, e.offsetX는 해당 이벤트가 발생한 element를 기준으로한 x좌표임
@ clientX, offsetX, pageX, screenX의 차이