웹에서는 기본적으로 마우스 휠을 이용하여 스크롤하지만,
모바일웹에서는 터치 드래그를 이용하여 스크롤을 한다.
이처럼 웹에서도 비슷하게 마우스 클릭 드래그를 이용하여 스크롤기능을 만들어보자.
텍스트나 이미지 등의 콘텐츠가 그것을 담는 div 태그보다 콘텐츠의 사이즈가 큰 경우,
해당 태그는 overflow 속성을 사용하기 때문에 스크롤이 생기게 된다.
이 때 해당 브라우저에서 자바스크립트의 스크롤을 하는 기능과 마우스의 여러 이벤트를 적절히 조합해서 클릭 드래그 기능을 구현 할 수 있다.
사용할 마우스의 이벤트로는 mousedown, mousemove, mouseup 3가지가 있다.
코드 부분을 간략하게 보자
var dragFlag = false;
var x, y, pre_x, pre_y;
$(function () {
$('.content-right').mousedown(
function (e) {
dragFlag = true;
var obj = $(this);
x = obj.scrollLeft();
y = obj.scrollTop();
pre_x = e.screenX;
pre_y = e.screenY;
}
);
$('.content-right').mousemove(
function (e) {
if (dragFlag) {
var obj = $(this);
obj.scrollLeft(x+ 2.2*(pre_x-e.screenX));
obj.scrollTop(y - e.screenY + pre_y);
return false;
}
}
);
$('.content-right').mouseup(
function () {
dragFlag = false;
}
);
});
먼저, 클릭으로 인해 mousedown 이벤트가 발생하면 특정 boolean 값의 변수, dragFlag를 true로 변경하여,
드래그 상태임을 나타낸다.
두 번째로, mousemove 이벤트에서는 드래그 상태인지 아닌지를 판별하여 드래그 상태에서만
스크롤이 될 수 있도록 로직이 담겨있다.
mousemove 이벤트가 발생하면서 드래그 상태라면, 즉 마우스를 꾹 누르고 있는 상태에서 마우스가 움직이면 스크롤을 진행하는 로직을 담는다.
마지막으로, mouseup 이벤트를 통해, 마우스 클릭 상태가 풀리면 드래그 상태를 false로 변경하여 더 이상 마우스를 움직여도 스크롤이 되지 않는다.
'웹개발 > JavaScript' 카테고리의 다른 글
카카오 로그인 API 예제 for JavaScript (0) | 2024.07.15 |
---|---|
네이버 로그인 API 예제 for JavaScript (0) | 2024.07.15 |
[JavaScript] ajaxStart, ajaxStop을 이용하여 로딩화면 구현하기 (0) | 2023.08.15 |
[JavaScript] html2canvas를 이용하여 웹 내 이미지 인쇄하기 (0) | 2023.08.13 |