Created
March 15, 2014 03:08
-
-
Save gfcarvalho/9561328 to your computer and use it in GitHub Desktop.
Simulate Mouse Events in Touch Environments
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function touchHandler(event) | |
{ | |
var touches = event.changedTouches, | |
first = touches[0], | |
type = ""; | |
switch(event.type) | |
{ | |
case "touchstart": type = "mousedown"; break; | |
case "touchmove": type="mousemove"; break; | |
case "touchend": type="mouseup"; break; | |
default: return; | |
} | |
// initMouseEvent(type, canBubble, cancelable, view, clickCount, | |
// screenX, screenY, clientX, clientY, ctrlKey, | |
// altKey, shiftKey, metaKey, button, relatedTarget); | |
var simulatedEvent = document.createEvent("MouseEvent"); | |
simulatedEvent.initMouseEvent(type, true, true, window, 1, | |
first.screenX, first.screenY, | |
first.clientX, first.clientY, false, | |
false, false, false, 0/*left*/, null); | |
first.target.dispatchEvent(simulatedEvent); | |
event.preventDefault(); | |
} | |
function init() | |
{ | |
document.addEventListener("touchstart", touchHandler, true); | |
document.addEventListener("touchmove", touchHandler, true); | |
document.addEventListener("touchend", touchHandler, true); | |
document.addEventListener("touchcancel", touchHandler, true); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Calling
preventDefault
on all touch events will prevent links from working properly. The main reason to callpreventDefault
at all is to stop the phone from scrolling, and you can do that by calling it only on thetouchmove
callback. The only downside to doing it this way is that the iPhone will sometimes display its hover popup over the drag origin. Use the floowing CSS property to turn off the callout:-webkit-touch-callout
.Font: JavaScript mapping touch events to mouse events on StackOverflow
Useful links:
https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Touch_events