[javascript] 드래그 앤 드롭 기능을 사용하여 웹사이트에서 캡션 생성기 구현하기

웹사이트에 캡션 생성기를 구현하는 것은 사용자들이 이미지나 동영상에 캡션을 추가할 수 있는 편리한 방법을 제공하는 것입니다. 이번에는 드래그 앤 드롭 기능을 사용하여 웹사이트에서 캡션 생성기를 구현하는 방법에 대해 알아보겠습니다. JavaScript를 사용하여 이 작업을 수행할 것입니다.

개요

  1. HTML 구조와 CSS 스타일링 설정하기
  2. 드래그 앤 드롭 이벤트 처리하기
  3. 캡션 생성하기

1. HTML 구조와 CSS 스타일링 설정하기

다음은 간단한 HTML 구조입니다.

<div id="image-container">
  <img id="image" src="image.jpg" alt="이미지">
  <div id="caption"></div>
</div>

이미지를 감싸는 image-container라는 요소와 이미지 아래에 캡션을 보여주기 위한 caption 요소를 추가합니다.

이제 CSS 스타일링을 설정합니다.

#image-container {
  position: relative;
}

#caption {
  position: absolute;
  bottom: 10px;
  left: 10px;
  background-color: rgba(0, 0, 0, 0.8);
  color: #fff;
  padding: 5px;
  font-size: 14px;
}

image-container 요소는 상대 위치(position: relative;)로 설정하고, caption 요소는 절대 위치(position: absolute;)로 설정하여 이미지 아래에 위치하도록 합니다. 또한 배경색, 텍스트 색상, 여백 등을 설정합니다.

2. 드래그 앤 드롭 이벤트 처리하기

이제 JavaScript를 사용하여 드래그 앤 드롭 이벤트를 처리합니다.

const imageContainer = document.getElementById('image-container');
const caption = document.getElementById('caption');

imageContainer.addEventListener('dragover', (event) => {
  event.preventDefault();
});

imageContainer.addEventListener('drop', (event) => {
  event.preventDefault();

  const files = event.dataTransfer.files;
  const file = files[0];
  
  const reader = new FileReader();
  reader.onload = function() {
    const imageDataURL = reader.result;
    const image = document.getElementById('image');
    image.src = imageDataURL;
  };
  reader.readAsDataURL(file);
});

dragover 이벤트에 대한 이벤트 리스너를 추가하여 기본 동작을 막습니다. 그리고 drop 이벤트에 대한 이벤트 리스너를 추가하여 드롭된 파일을 가져옵니다. 가져온 파일로부터 이미지 파일의 데이터 URL을 읽어와서 image 요소의 src 속성으로 설정합니다.

3. 캡션 생성하기

이제 드롭된 이미지의 캡션을 생성하는 기능을 추가합니다.

imageContainer.addEventListener('drop', (event) => {
  event.preventDefault();

  const files = event.dataTransfer.files;
  const file = files[0];
  
  const reader = new FileReader();
  reader.onload = function() {
    const imageDataURL = reader.result;
    const image = document.getElementById('image');
    image.src = imageDataURL;
    
    const captionText = prompt('캡션을 입력하세요:');
    caption.textContent = captionText;
  };
  reader.readAsDataURL(file);
});

prompt 함수를 사용하여 사용자로부터 캡션을 입력받고, caption 요소의 textContent를 설정하여 캡션을 표시합니다.

이제 웹사이트에서 이미지 파일을 드래그 앤 드롭하여 캡션을 생성할 수 있는 캡션 생성기가 완성되었습니다.

참고 자료