Components
DragOverlay
Render a custom element as visual feedback during drag operations.
Overview
The DragOverlay component renders a custom overlay element while a drag operation is in progress. This allows you to display a completely different element than the one being dragged, which is useful for rendering a styled clone, a preview, or a simplified representation of the dragged element.
Usage
Import and place the DragOverlay component inside a DragDropProvider. Its children will only be rendered when a drag operation is active.
import {useDraggable, DragOverlay} from '@dnd-kit/react';
function Draggable() {
const {ref} = useDraggable({id: 'draggable'});
return (
<>
<button ref={ref}>Draggable</button>
<DragOverlay>
<div>I will be rendered while dragging...</div>
</DragOverlay>
</>
);
}You should only render the DragOverlay component once per DragDropProvider component.
Rendering based on the drag source
To get around the fact that the DragOverlay component should only be rendered once, you can pass a function as a child, which will receive the source as an argument. This is useful for rendering different content depending on which element is being dragged.
import {DragDropProvider, DragOverlay} from '@dnd-kit/react';
function App() {
return (
<DragDropProvider>
<Draggable id="foo" />
<Draggable id="bar" />
<DragOverlay>
{source => (
<div>Dragging {source.id}</div>
)}
</DragOverlay>
</DragDropProvider>
);
}Customizing the drop animation
By default, when a drag operation ends, the overlay animates back to the position of the source element. You can customize or disable this animation using the dropAnimation prop.
{/* Disable the drop animation */}
<DragOverlay dropAnimation={null}>
<div>No animation on drop</div>
</DragOverlay>
{/* Customize the animation timing */}
<DragOverlay dropAnimation={{ duration: 150, easing: 'ease-out' }}>
<div>Fast drop animation</div>
</DragOverlay>
{/* Provide a custom animation function */}
<DragOverlay dropAnimation={async ({ element, feedbackElement, translate }) => {
// Custom animation logic using Web Animations API, GSAP, etc.
}}>
<div>Custom animation</div>
</DragOverlay>Props
The content to render as the drag overlay. Only rendered when a drag operation is in progress. Can be a React node or a function that receives the drag source as an argument.
The HTML tag to render as the overlay wrapper element.
Whether the drag overlay is disabled. Can be a boolean or a function that receives the current drag source.
Customize or disable the drop animation that plays when a drag operation ends.
undefined– use the default animation (250msease)null– disable the drop animation entirely{duration, easing}– customize the animation timing(context) => Promise<void> | void– provide a fully custom animation function
CSS class name for the overlay wrapper element.
Inline styles for the overlay wrapper element.