Creating drag-and-drop elements using vanilla JavaScript involves a few steps:
HTML Structure:Firstly, set up your HTML structure with the elements you want to make draggable and droppable.
<!DOCTYPE html>
<html>
<head>
<style>
/* Add CSS for the draggable and droppable elements */
.draggable {
width: 100px;
height: 100px;
background-color: #ccc;
margin: 10px;
cursor: move;
}
.droppable {
width: 200px;
height: 200px;
background-color: lightblue;
margin-top: 20px;
}
</style>
</head>
<body>
<div class="draggable" draggable="true">Drag me!</div>
<div class="droppable" id="droppableArea">Drop here!</div>
<script>
// JavaScript logic will go here
</script>
</body>
</html>
JavaScript for Drag and Drop Functionality:
Now, add JavaScript logic to make elements draggable and droppable:
// Get the draggable element
const draggableElement = document.querySelector('.draggable');
// Add event listeners for drag events
draggableElement.addEventListener('dragstart', (event) => {
// Set data to be transferred during drag
event.dataTransfer.setData('text/plain', 'Drag me!');
});
// Get the droppable area
const droppableArea = document.getElementById('droppableArea');
// Add event listeners for drop events
droppableArea.addEventListener('dragover', (event) => {
// Allow drop by preventing the default behavior
event.preventDefault();
});
droppableArea.addEventListener('drop', (event) => {
// Prevent default behavior to handle the drop
event.preventDefault();
// Get data from the dragged element
const data = event.dataTransfer.getData('text/plain');
// Append the dragged data to the droppable area
droppableArea.innerHTML = data;
});
Explanation:
-
draggable="true"
attribute is added to the element you want to make draggable. -
dataTransfer.setData()
sets the data to be transferred during the drag. -
dragstart
event is used to start the drag operation. -
dragover
event is used to allow the element to be a drop target by preventing the default behavior. -
drop
event is triggered when an element is dropped onto the target area. -
event.preventDefault()
prevents the default action of an event, allowing the drop.
Remember, this is a basic implementation. For more complex scenarios or multiple draggable items, you might need additional logic to handle different elements and their behaviors during drag and drop operations.