Skip to content

Commit 4bc2e21

Browse files
committed
feat: support event change
1 parent 2b293b8 commit 4bc2e21

File tree

3 files changed

+17
-0
lines changed

3 files changed

+17
-0
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,12 @@ generic="T = any, U = number | RangeData\<T>"
122122
| renderBottomOnActive | boolean | Specifies whether to render only while the thumb is active | false |
123123
| marks | RangeMarks | Show marks under the track | undefined |
124124

125+
## Events
126+
127+
| Name | Type | Description |
128+
| ------ | -------------------------------------------------------------------- | ---------------------------------------------------------- |
129+
| change | (value: RangeValue<T, U>, thumbValue: U, thumbIndex: number) => void | It will emit when thumb `pointerup` (after move the thumb) |
130+
125131
## slots
126132

127133
| Name | Type | Description |

src/Range.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ const props = withDefaults(defineProps<{
4040
4141
const emits = defineEmits<{
4242
(e: 'update:modelValue', modelValue: typeof props.modelValue): void
43+
(e: 'change', value: RangeValue<T, U>, thumbValue: U, thumbIndex: number): void
4344
}>()
4445
4546
defineSlots<{
@@ -316,6 +317,7 @@ provide(RangeTrackRefKey, trackRef)
316317
@update="onUpdate"
317318
@delete="onDelete"
318319
@pointerdown="current = Number(idx)"
320+
@change="emits('change', props.modelValue, Array.isArray(props.modelValue) ? props.modelValue[index] : props.modelValue, index)"
319321
>
320322
<template #top="{ data }">
321323
<slot name="top" :data="data" />

src/RangeThumb.vue

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ const emits = defineEmits<{
2727
(e: 'deleting'): void
2828
(e: 'cancelDelete'): void
2929
(e: 'moveDone'): void
30+
(e: 'change'): void
3031
}>()
3132
3233
defineSlots<{
@@ -42,6 +43,8 @@ const cursor = computed(() => props.disabled ? 'cursor-not-allowed' : removable.
4243
4344
const deleting = ref(false)
4445
46+
let moved = false
47+
4548
function setTrackCursor(cursor: string | undefined) {
4649
if (!trackRef?.value)
4750
return
@@ -70,6 +73,7 @@ function shouldDelete(offset: number) {
7073
function onPointerMove(e: PointerEvent) {
7174
if (!thumbRef.value || !trackRef?.value || props.disabled)
7275
return
76+
moved = true
7377
const trackRect = trackRef.value.getBoundingClientRect()
7478
const offset = props.vertical ? e.clientY - trackRect.top : e.clientX - trackRect.left
7579
const percent = offset / (props.vertical ? trackRect.height : trackRect.width) * 100
@@ -87,6 +91,10 @@ function onPointerUp(e: PointerEvent) {
8791
window.removeEventListener('pointermove', onPointerMove)
8892
window.removeEventListener('pointerup', onPointerUp)
8993
window.removeEventListener('pointercancel', onPointerUp)
94+
if (moved) {
95+
emits('change')
96+
moved = false
97+
}
9098
if (e.type === 'pointercancel' || props.disabled) {
9199
setTrackCursor(undefined)
92100
emits('moveDone')
@@ -111,6 +119,7 @@ async function onPointerDown(e: PointerEvent) {
111119
return
112120
}
113121
setTrackCursor(cursor.value)
122+
moved = false
114123
window.addEventListener('pointermove', onPointerMove, { passive: false })
115124
window.addEventListener('pointerup', onPointerUp)
116125
window.addEventListener('pointercancel', onPointerUp)

0 commit comments

Comments
 (0)