Skip to content

Commit 7cec793

Browse files
committed
feat: "v-touch-hold" directive
1 parent 3f95aaa commit 7cec793

File tree

3 files changed

+72
-11
lines changed

3 files changed

+72
-11
lines changed

src/install.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ import directiveGoBack from './vue-directives/go-back'
88
import directiveScrollFire from './vue-directives/scroll-fire'
99
import directiveScroll from './vue-directives/scroll'
1010
import directiveTooltip from './vue-directives/tooltip'
11-
import directiveTouchPan from './vue-directives/pan'
12-
import directiveTouchSwipe from './vue-directives/swipe'
11+
import directiveTouchHold from './vue-directives/touch-hold'
12+
import directiveTouchPan from './vue-directives/touch-pan'
13+
import directiveTouchSwipe from './vue-directives/touch-swipe'
1314

1415
import Checkbox from './vue-components/checkbox/checkbox.vue'
1516
import Chips from './vue-components/chips/chips.vue'
@@ -63,6 +64,7 @@ function registerDirectives (_Vue) {
6364
_Vue.directive('scroll-fire', directiveScrollFire)
6465
_Vue.directive('scroll', directiveScroll)
6566
_Vue.directive('tooltip', directiveTooltip)
67+
_Vue.directive('touch-hold', directiveTouchHold)
6668
_Vue.directive('touch-pan', directiveTouchPan)
6769
_Vue.directive('touch-swipe', directiveTouchSwipe)
6870
}

src/vue-components/toggle/toggle.vue

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
<label
33
class="quasar-toggle"
44
:class="{disabled: disable}"
5-
v-touch:pan="toggle"
6-
v-touch-options:pan="{ direction: 'horizontal' }"
5+
v-touch-swipe.horizontal="toggle"
76
>
87
<input type="checkbox" v-model="model" :disabled="disable">
98
<div></div>
@@ -35,13 +34,14 @@ export default {
3534
}
3635
},
3736
methods: {
38-
toggle (event) {
39-
if (
40-
!this.disable &&
41-
event.isFinal &&
42-
(this.model && event.deltaX < 0 || !this.model && event.deltaX > 0)
43-
) {
44-
this.model = !this.model
37+
toggle (evt) {
38+
if (!this.disable) {
39+
if (this.model && evt.direction === 'left') {
40+
this.model = false
41+
}
42+
else if (!this.model && evt.direction === 'right') {
43+
this.model = true
44+
}
4545
}
4646
}
4747
}

src/vue-directives/touch-hold.js

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
let
2+
data = {},
3+
defaultDuration = 800
4+
5+
function update (el, binding) {
6+
data[el].duration = parseInt(binding.arg, 10) || defaultDuration
7+
if (binding.oldValue !== binding.value) {
8+
data[el].handler = binding.value
9+
}
10+
}
11+
12+
export default {
13+
bind (el, binding) {
14+
let ctx = {
15+
start (evt) {
16+
ctx.timer = setTimeout(() => {
17+
document.removeEventListener('mousemove', ctx.mouseAbort)
18+
document.removeEventListener('mouseup', ctx.mouseAbort)
19+
ctx.handler()
20+
}, ctx.duration)
21+
},
22+
mouseStart (evt) {
23+
document.addEventListener('mousemove', ctx.mouseAbort)
24+
document.addEventListener('mouseup', ctx.mouseAbort)
25+
ctx.start(evt)
26+
},
27+
abort (evt) {
28+
evt.preventDefault()
29+
evt.stopPropagation()
30+
if (ctx.timer) {
31+
clearTimeout(ctx.timer)
32+
ctx.timer = null
33+
}
34+
},
35+
mouseAbort (evt) {
36+
document.removeEventListener('mousemove', ctx.mouseAbort)
37+
document.removeEventListener('mouseup', ctx.mouseAbort)
38+
ctx.abort(evt)
39+
}
40+
}
41+
42+
data[el] = ctx
43+
update(el, binding)
44+
el.addEventListener('touchstart', ctx.start)
45+
el.addEventListener('touchmove', ctx.abort)
46+
el.addEventListener('touchend', ctx.abort)
47+
el.addEventListener('mousedown', ctx.mouseStart)
48+
},
49+
update,
50+
unbind (el, binding) {
51+
let ctx = data[el]
52+
el.removeEventListener('touchstart', ctx.start)
53+
el.removeEventListener('touchmove', ctx.abort)
54+
el.removeEventListener('touchend', ctx.abort)
55+
el.removeEventListener('mousedown', ctx.mouseStart)
56+
document.removeEventListener('mousemove', ctx.mouseAbort)
57+
document.removeEventListener('mouseup', ctx.mouseAbort)
58+
}
59+
}

0 commit comments

Comments
 (0)