Category | Elements |
---|---|
Export Size | 1.35 kB |
Last Changed | 2 weeks ago |
Make elements draggable.
<script setup lang="ts"> import { ref } from 'vue' import { useDraggable } from '@vueuse/core' const el = ref<HTMLElement | null>(null) // `style` will be a helper computed for `left: ?px; top: ?px;` const { x, y, style } = useDraggable(el, { initialValue: { x: 40, y: 40 }, }) </script> <template> <div ref="el" :style="style" style="position: fixed"> Drag me! I am at {{x}}, {{y}} </div> </template>
This function also provides a renderless component version via the
@vueuse/components
package. Learn more about the usage.
<UseDraggable :initialValue="{ x: 10, y: 10 }" v-slot="{ x, y }"> Drag me! I am at {{x}}, {{y}} </UseDraggable>
For component usage, additional props storageKey
and storageType
can be passed to the component and enable the persistence of the element position.
<UseDraggable storage-key="vueuse-draggable" storage-type="session"> Refresh the page and I am still in the same position! </UseDraggable>
export interface UseDraggableOptions { /** * Only start the dragging when click on the element directly * * @default false */ exact?: MaybeRefOrGetter<boolean> /** * Prevent events defaults * * @default false */ preventDefault?: MaybeRefOrGetter<boolean> /** * Prevent events propagation * * @default false */ stopPropagation?: MaybeRefOrGetter<boolean> /** * Whether dispatch events in capturing phase * * @default true */ capture?: boolean /** * Element to attach `pointermove` and `pointerup` events to. * * @default window */ draggingElement?: MaybeRefOrGetter< HTMLElement | SVGElement | Window | Document | null | undefined > /** * Handle that triggers the drag event * * @default target */ handle?: MaybeRefOrGetter<HTMLElement | SVGElement | null | undefined> /** * Pointer types that listen to. * * @default ['mouse', 'touch', 'pen'] */ pointerTypes?: PointerType[] /** * Initial position of the element. * * @default { x: 0, y: 0 } */ initialValue?: MaybeRefOrGetter<Position> /** * Callback when the dragging starts. Return `false` to prevent dragging. */ onStart?: (position: Position, event: PointerEvent) => void | false /** * Callback during dragging. */ onMove?: (position: Position, event: PointerEvent) => void /** * Callback when dragging end. */ onEnd?: (position: Position, event: PointerEvent) => void /** * Axis to drag on. * * @default 'both' */ axis?: "x" | "y" | "both" } /** * Make elements draggable. * * @see https://vueuse.org/useDraggable * @param target * @param options */ export declare function useDraggable( target: MaybeRefOrGetter<HTMLElement | SVGElement | null | undefined>, options?: UseDraggableOptions ): { position: Ref<{ x: number y: number }> isDragging: ComputedRef<boolean> style: ComputedRef<string> x: Ref<number> y: Ref<number> } export type UseDraggableReturn = ReturnType<typeof useDraggable>
© 2019-present Anthony Fu
Licensed under the MIT License.
https://vueuse.org/core/useDraggable/