Skip to content

Commit

Permalink
fix(VSlider): support touch and drag (#13263)
Browse files Browse the repository at this point in the history
fixes #13259
  • Loading branch information
inottn committed Mar 23, 2021
1 parent c273acb commit 89b55e2
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 18 deletions.
13 changes: 5 additions & 8 deletions packages/vuetify/src/components/VRangeSlider/VRangeSlider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -192,14 +192,11 @@ export default VSlider.extend({
const mouseUpOptions = passiveSupported ? { passive: true, capture: true } : true
const mouseMoveOptions = passiveSupported ? { passive: true } : false

if ('touches' in e) {
this.app.addEventListener('touchmove', this.onMouseMove, mouseMoveOptions)
addOnceEventListener(this.app, 'touchend', this.onSliderMouseUp, mouseUpOptions)
} else {
this.onMouseMove(e)
this.app.addEventListener('mousemove', this.onMouseMove, mouseMoveOptions)
addOnceEventListener(this.app, 'mouseup', this.onSliderMouseUp, mouseUpOptions)
}
const isTouchEvent = 'touches' in e

this.onMouseMove(e)
this.app.addEventListener(isTouchEvent ? 'touchmove' : 'mousemove', this.onMouseMove, mouseMoveOptions)
addOnceEventListener(this.app, isTouchEvent ? 'touchend' : 'mouseup', this.onSliderMouseUp, mouseUpOptions)

this.$emit('start', this.internalValue)
},
Expand Down
14 changes: 6 additions & 8 deletions packages/vuetify/src/components/VSlider/VSlider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,7 @@ export default mixins<options &
on: {
click: this.onSliderClick,
mousedown: this.onSliderMouseDown,
touchstart: this.onSliderMouseDown,
},
}, this.genChildren())
},
Expand Down Expand Up @@ -465,14 +466,11 @@ export default mixins<options &
}, 300)
}

if ('touches' in e) {
this.app.addEventListener('touchmove', this.onMouseMove, mouseMoveOptions)
addOnceEventListener(this.app, 'touchend', this.onSliderMouseUp, mouseUpOptions)
} else {
this.onMouseMove(e)
this.app.addEventListener('mousemove', this.onMouseMove, mouseMoveOptions)
addOnceEventListener(this.app, 'mouseup', this.onSliderMouseUp, mouseUpOptions)
}
const isTouchEvent = 'touches' in e

this.onMouseMove(e)
this.app.addEventListener(isTouchEvent ? 'touchmove' : 'mousemove', this.onMouseMove, mouseMoveOptions)
addOnceEventListener(this.app, isTouchEvent ? 'touchend' : 'mouseup', this.onSliderMouseUp, mouseUpOptions)

this.$emit('start', this.internalValue)
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -294,14 +294,19 @@ describe('VSlider.ts', () => {
expect(wrapper.vm.thumbPressed).toBe(false)
expect(wrapper.vm.isActive).toBe(false)

container.trigger('mousedown', {
touches: [],
container.trigger('touchstart', {
touches: [{}],
})

await wrapper.vm.$nextTick()

expect(wrapper.vm.thumbPressed).toBe(true)
expect(wrapper.vm.isActive).toBe(true)

el.dispatchEvent(new Event('touchend'))

expect(wrapper.vm.thumbPressed).toBe(false)
expect(wrapper.vm.isActive).toBe(false)
})

it('should return a rounded value', () => {
Expand Down

0 comments on commit 89b55e2

Please sign in to comment.