250x250
syk531
하루
syk531
전체 방문자
오늘
어제
  • 분류 전체보기 (166)
    • 개발 (166)
      • java (11)
      • kotlin (7)
      • spring, spring boot (35)
      • Javascript (4)
      • Tyhmeleaf (2)
      • Kafka (17)
      • Docker (8)
      • Kubernetes (3)
      • Elastic Stack (4)
      • react native (3)
      • Web (4)
      • GIS (3)
      • 리눅스 (16)
      • Windows (2)
      • 네트워크 (2)
      • 안드로이드앱 (5)
      • git (2)
      • Tool (15)
      • 프로젝트 (7)
      • 백준알고리즘 (14)
      • DB (2)

인기 글

최근 글

블로그 메뉴

    공지사항

    태그

    • 티스토리챌린지
    • 뉴스앱
    • 오블완

    최근 댓글

    티스토리

    hELLO · Designed By 정상우.
    syk531

    하루

    개발/Javascript

    Javascript로 Div 태그 드래그 이동 기능 구현

    2025. 1. 24. 10:35
    728x90
    반응형

    Openlayers로 map에 띄운 Overlay를 마우스 드래그로 이동하는 기능을 추가할 필요가 생겼습니다.

    아래 코드는 Overlay로 띄운 popup을 마우스 드래그로 이동시키는 Javascript 소스 입니다.

    const popupElement = document.getElementById('popup');
    
    let isDragging = false;
    let startPixel = null; // 드래그 시작 좌표
    
    popupElement.addEventListener('mousedown', (event) => {
        isDragging = true;
        startPixel = [event.clientX, event.clientY]; // 마우스 클릭 좌표(초기위치)
        popupElement.style.cursor = 'grabbing'; // 드래그 중 커서 변경
    });
    
    // mousemove 이벤트: 드래그 중
    document.addEventListener('mousemove', (event) => {
        if (!isDragging) return; //popupElement가 클릭된 상태에서 마우스를 이동(드래그)를 해야 아래 로직 실행
    
        const deltaX = event.clientX - startPixel[0]; //x 이동거리
        const deltaY = event.clientY - startPixel[1]; //y 이동거리
        startPixel = [event.clientX, event.clientY]; // 초기위치 변경
    
        const container = document.querySelector(".ol-overlay-container");
    
        //dom 객체 이동
        container.style.left = parseInt(container.style.left) + deltaX + 'px';
        container.style.top = parseInt(container.style.top) + deltaY + 'px';
    });
    
    document.addEventListener('mouseup', () => {
        isDragging = false;
        startPixel = null;
        popupElement.style.cursor = 'move'; // 드래그 종료 후 커서 복원
    });
    728x90
    반응형
    저작자표시 (새창열림)

    '개발 > Javascript' 카테고리의 다른 글

    [chartjs] 축 시작값, 최대값 설정 방법  (0) 2024.04.11
    Axios 라이브러리 특징 및 사용법  (0) 2023.11.28
    Template literal(템플릿 리터럴) If문 사용  (0) 2023.08.20
      '개발/Javascript' 카테고리의 다른 글
      • [chartjs] 축 시작값, 최대값 설정 방법
      • Axios 라이브러리 특징 및 사용법
      • Template literal(템플릿 리터럴) If문 사용
      syk531
      syk531
      기억을 위해 기록을.

      티스토리툴바