Skip to content

Commit dee9ac4

Browse files
huiliangShenbanruo
andauthored
feat(useDraggable): add disabled parameter (#3613)
Co-authored-by: banruo <shl@dataqin.com>
1 parent 20aecd2 commit dee9ac4

File tree

3 files changed

+27
-4
lines changed

3 files changed

+27
-4
lines changed

packages/core/useDraggable/component.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,12 @@ export const UseDraggable = /* #__PURE__ */ defineComponent<UseDraggableProps>({
3434
'onStart',
3535
'onMove',
3636
'onEnd',
37+
'disabled',
3738
] as unknown as undefined,
3839
setup(props, { slots }) {
3940
const target = ref()
4041
const handle = computed(() => props.handle ?? target.value)
42+
const disabled = computed(() => !!props.disabled)
4143
const storageValue = props.storageKey && useStorage(
4244
props.storageKey,
4345
toValue(props.initialValue) || { x: 0, y: 0 },
@@ -61,6 +63,7 @@ export const UseDraggable = /* #__PURE__ */ defineComponent<UseDraggableProps>({
6163
handle,
6264
initialValue,
6365
onEnd,
66+
disabled,
6467
}))
6568

6669
return () => {

packages/core/useDraggable/demo.vue

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,25 @@ const handle = ref<HTMLElement | null>(null)
99
1010
const innerWidth = isClient ? window.innerWidth : 200
1111
12+
const disabled = ref(false)
1213
const { x, y, style } = useDraggable(el, {
1314
initialValue: { x: innerWidth / 4.2, y: 80 },
1415
preventDefault: true,
16+
disabled,
1517
})
1618
</script>
1719

1820
<template>
1921
<div>
22+
<div class="text-xs">
23+
<label class="checkbox">
24+
<input
25+
:checked="disabled" type="checkbox" name="enabled"
26+
@input="($event.target as HTMLInputElement)!.checked ? disabled = true : disabled = false "
27+
>
28+
<span>Disabled drag and drop</span>
29+
</label>
30+
</div>
2031
<p class="italic op50 text-center">
2132
Check the floating boxes
2233
</p>
@@ -42,9 +53,10 @@ const { x, y, style } = useDraggable(el, {
4253
shadow="~ hover:lg"
4354
class="fixed bg-$vp-c-bg select-none cursor-move z-31"
4455
:initial-value="{ x: innerWidth / 3.9, y: 150 }"
45-
:prevent-default="true"
56+
prevent-default
4657
storage-key="vueuse-draggable-pos"
4758
storage-type="session"
59+
:disabled="disabled"
4860
>
4961
Renderless component
5062
<div class="text-xs opacity-50">
@@ -64,6 +76,7 @@ const { x, y, style } = useDraggable(el, {
6476
:initial-value="{ x: innerWidth / 3.6, y: 240 }"
6577
:prevent-default="true"
6678
:handle="handle"
79+
:disabled="disabled"
6780
>
6881
<div ref="handle" class="cursor-move">
6982
👋 Drag here!

packages/core/useDraggable/index.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,13 @@ export interface UseDraggableOptions {
9090
* @default 'both'
9191
*/
9292
axis?: 'x' | 'y' | 'both'
93+
94+
/**
95+
* Disabled drag and drop.
96+
*
97+
* @default false
98+
*/
99+
disabled?: MaybeRefOrGetter<boolean>
93100
}
94101

95102
/**
@@ -138,7 +145,7 @@ export function useDraggable(
138145
}
139146

140147
const start = (e: PointerEvent) => {
141-
if (!filterEvent(e))
148+
if (toValue(options.disabled) || !filterEvent(e))
142149
return
143150
if (toValue(exact) && e.target !== toValue(target))
144151
return
@@ -156,7 +163,7 @@ export function useDraggable(
156163
handleEvent(e)
157164
}
158165
const move = (e: PointerEvent) => {
159-
if (!filterEvent(e))
166+
if (toValue(options.disabled) || !filterEvent(e))
160167
return
161168
if (!pressedDelta.value)
162169
return
@@ -182,7 +189,7 @@ export function useDraggable(
182189
handleEvent(e)
183190
}
184191
const end = (e: PointerEvent) => {
185-
if (!filterEvent(e))
192+
if (toValue(options.disabled) || !filterEvent(e))
186193
return
187194
if (!pressedDelta.value)
188195
return

0 commit comments

Comments
 (0)