<header>
  <h2 class="title">HTML Events: mousedown</h2>
  <p class="description">Перетягування елементів за допомогою події mousedown.</p>
</header>
<main>
  <div class="result">
    <!-- Блок для перетягування -->
    <div id="draggableBox" class="box"></div>
  </div>
</main>
body {
  font-size: 16px;
  line-height: 1.5;
  font-family: monospace;
}

header {
  background-color: #f1f1f1;
  margin-bottom: 25px;
  padding: 15px;
  -webkit-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  -moz-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}

header h2.title {
  padding-bottom: 15px;
  border-bottom: 1px solid #999;
}

header p.description {
  font-style: italic;
  color: #222;
}

.result {
  background-color: #f8f8f8;
  padding: 15px;
  -webkit-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  -moz-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}

.box {
  width: 100px;
  height: 100px;
  background-color: #4CAF50;
  position: absolute;
  top: 100px;
  left: 100px;
  cursor: grab;
}

.box:active {
  cursor: grabbing;
}
// Отримуємо елемент, який будемо перетягувати
const box = document.getElementById('draggableBox');
let isDragging = false;
let offsetX, offsetY;

// Додаємо подію mousedown, щоб почати перетягування
box.addEventListener('mousedown', function(event) {
  isDragging = true;
  // Зберігаємо різницю між положенням курсора і верхнім лівим кутом блоку
  offsetX = event.clientX - box.offsetLeft;
  offsetY = event.clientY - box.offsetTop;
  // Змінюємо стилі курсора
  box.style.cursor = 'grabbing';
});

// Додаємо подію mousemove для переміщення блоку
document.addEventListener('mousemove', function(event) {
  if (isDragging) {
    box.style.left = (event.clientX - offsetX) + 'px';
    box.style.top = (event.clientY - offsetY) + 'px';
  }
});

// Додаємо подію mouseup для завершення перетягування
document.addEventListener('mouseup', function() {
  isDragging = false;
  // Відновлюємо початковий стиль курсора
  box.style.cursor = 'grab';
});

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.