Skip to content

Commit 9b5786a

Browse files
committed
Use event time stamp to prevent click event when touch is available
1 parent e45d774 commit 9b5786a

File tree

1 file changed

+27
-33
lines changed

1 file changed

+27
-33
lines changed

index.js

Lines changed: 27 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,16 @@ var vueTouchEvents = {
4646

4747

4848
function touchStartEvent(event) {
49-
var $this = this.$$touchObj
50-
if(event.type.indexOf("mouse") === -1){
51-
$this.supportTouch = true;
49+
var $this = this.$$touchObj,
50+
isTouchEvent = event.type.indexOf("touch") >= 0,
51+
isMouseEvent = event.type.indexOf("mouse") >= 0
52+
53+
if (isTouchEvent) {
54+
$this.lastTouchStartTime = event.timeStamp
5255
}
5356

54-
if($this.supportTouch && event.type.indexOf("mouse") !== -1){
55-
// don't click when we're touch instead of clicking
56-
return;
57+
if (isMouseEvent && $this.lastTouchStartTime && event.timeStamp - $this.lastTouchStartTime < 350) {
58+
return
5759
}
5860

5961
if ($this.touchStarted) {
@@ -81,11 +83,6 @@ var vueTouchEvents = {
8183
function touchMoveEvent(event) {
8284
var $this = this.$$touchObj
8385

84-
if($this.supportTouch && event.type.indexOf("mouse") !== -1){
85-
// don't move when we're touch instead of clicking
86-
return;
87-
}
88-
8986
$this.currentX = touchX(event)
9087
$this.currentY = touchY(event)
9188

@@ -121,11 +118,16 @@ var vueTouchEvents = {
121118
}
122119

123120
function touchEndEvent(event) {
124-
var $this = this.$$touchObj
121+
var $this = this.$$touchObj,
122+
isTouchEvent = event.type.indexOf("touch") >= 0,
123+
isMouseEvent = event.type.indexOf("mouse") >= 0
125124

126-
if($this.supportTouch && event.type.indexOf("mouse") !== -1){
127-
// don't touchend when we're touch instead of clicking
128-
return;
125+
if (isTouchEvent) {
126+
$this.lastTouchEndTime = event.timeStamp
127+
}
128+
129+
if (isMouseEvent && $this.lastTouchEndTime && event.timeStamp - $this.lastTouchEndTime < 350) {
130+
return
129131
}
130132

131133
$this.touchStarted = false
@@ -224,8 +226,6 @@ var vueTouchEvents = {
224226
bind: function ($el, binding) {
225227

226228
$el.$$touchObj = $el.$$touchObj || {
227-
// will change to true when `touchstart` event first trigger
228-
supportTouch: false,
229229
// an object contains all callbacks registered,
230230
// key is event name, value is an array
231231
callbacks: {},
@@ -269,14 +269,11 @@ var vueTouchEvents = {
269269
$el.addEventListener('touchcancel', touchCancelEvent)
270270
$el.addEventListener('touchend', touchEndEvent)
271271

272-
if (!options.disableClick) {
273-
//$el.addEventListener('click', clickEvent)
274-
$el.addEventListener('mousedown', touchStartEvent)
275-
$el.addEventListener('mousemove', touchMoveEvent)
276-
$el.addEventListener('mouseup', touchEndEvent)
277-
$el.addEventListener('mouseenter', mouseEnterEvent)
278-
$el.addEventListener('mouseleave', mouseLeaveEvent)
279-
}
272+
$el.addEventListener('mousedown', touchStartEvent)
273+
$el.addEventListener('mousemove', touchMoveEvent)
274+
$el.addEventListener('mouseup', touchEndEvent)
275+
$el.addEventListener('mouseenter', mouseEnterEvent)
276+
$el.addEventListener('mouseleave', mouseLeaveEvent)
280277

281278
// set bind mark to true
282279
$el.$$touchObj.hasBindTouchEvents = true
@@ -288,14 +285,11 @@ var vueTouchEvents = {
288285
$el.removeEventListener('touchcancel', touchCancelEvent)
289286
$el.removeEventListener('touchend', touchEndEvent)
290287

291-
if (!options.disableClick) {
292-
//$el.removeEventListener('click', clickEvent)
293-
$el.removeEventListener('mousedown', touchStartEvent)
294-
$el.removeEventListener('mousemove', touchMoveEvent)
295-
$el.removeEventListener('mouseup', touchEndEvent)
296-
$el.removeEventListener('mouseenter', mouseEnterEvent)
297-
$el.removeEventListener('mouseleave', mouseLeaveEvent)
298-
}
288+
$el.removeEventListener('mousedown', touchStartEvent)
289+
$el.removeEventListener('mousemove', touchMoveEvent)
290+
$el.removeEventListener('mouseup', touchEndEvent)
291+
$el.removeEventListener('mouseenter', mouseEnterEvent)
292+
$el.removeEventListener('mouseleave', mouseLeaveEvent)
299293

300294
// remove vars
301295
delete $el.$$touchObj

0 commit comments

Comments
 (0)