DEV Community

CodePassion
CodePassion

Posted on

Creating a Draggable Element Using HTML, CSS, and JavaScript

In modern web development, interactivity is key to engaging users and creating a dynamic user experience. One way to add interactivity is by making elements draggable. In this post, we will explore how to create a draggable element using HTML, CSS, and JavaScript.

output:

draggable element

HTML Structure
Let's start with the basic HTML structure. We will create a simple div element that we want to make draggable. Here's the code:



<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Draggable Element</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="draggable" id="draggableElement">Drag me!</div>
<script src="script.js"></script>
</body>
</html>



Enter fullscreen mode Exit fullscreen mode

In this code, we have a div with the class draggable and an ID of draggableElement. This will be the element that we make draggable.

Styling the Draggable Element with CSS



.draggable {
    position: absolute;
    cursor: grab;
    width: 100px;
    height: 100px;
    background-color: #007bff;
    color: #fff;
    text-align: center;
    line-height: 100px;
    border-radius: 8px;
    user-select: none;
}

.draggable.dragging {
    cursor: grabbing;
}



Enter fullscreen mode Exit fullscreen mode

In this CSS, we define the .draggable class to style our element. We set its position to absolute so that we can move it freely around the page. The cursor property is set to grab to indicate that the element is draggable. We also define the width, height, background color, text color, text alignment, and line height to center the text vertically and horizontally. The border-radius is added for rounded corners, and user-select: none is used to prevent text selection while dragging. Read More

Adding Interactivity with JavaScript



let draggableElement = document.getElementById('draggableElement');
let offsetX, offsetY;

draggableElement.addEventListener('mousedown', startDragging);
draggableElement.addEventListener('mouseup', stopDragging);

function startDragging(e) {
    e.preventDefault();
    offsetX = e.clientX - draggableElement.getBoundingClientRect().left;
    offsetY = e.clientY - draggableElement.getBoundingClientRect().top;
    draggableElement.classList.add('dragging');
    document.addEventListener('mousemove', dragElement);
}

function dragElement(e) {
    e.preventDefault();
    let x = e.clientX - offsetX;
    let y = e.clientY - offsetY;
    draggableElement.style.left = x + 'px';
    draggableElement.style.top = y + 'px';
}

function stopDragging() {
    draggableElement.classList.remove('dragging');
    document.removeEventListener('mousemove', dragElement);
}



Enter fullscreen mode Exit fullscreen mode

Start Dragging: The startDragging function is triggered when the user presses the mouse button down on the element. This function:

  1. Prevents the default behavior of the event using e.preventDefault().
  2. Calculates the offsets by subtracting the element's top-left corner position from the mouse position.
  3. Adds the dragging class to change the cursor.
  4. Adds an event listener for the mousemove event to the document, which will trigger the dragElement function.

Drag Element: The dragElement function is triggered when the mouse moves. This function:

  1. Prevents the default behavior of the event.
  2. Calculates the new position of the element based on the mouse position and the offsets.
  3. Updates the left and top CSS properties of the element to move it to the new position.

Stop Dragging: The stopDragging function is triggered when the user releases the mouse button. This function:

  1. Removes the dragging class to revert the cursor back to its original state.
  2. Removes the mousemove event listener from the document to stop the dragging. Read More

conclusion:
By understanding the basics of event listeners and DOM manipulation, we can add interactivity to our web projects, enhancing the user experience.

Read full article- click here

Top comments (0)