// http://ross.posterous.com/2008/08/19/iphone-touch-events-in-javascript/ /** * * @param {Event} ev * @returns {void} */ const touchHandler = (ev) => { ev.preventDefault() const { changedTouches } = ev const first = changedTouches[0] let type = '' switch (ev.type) { case 'touchstart': type = 'mousedown'; break case 'touchmove': type = 'mousemove'; break case 'touchend': type = 'mouseup'; break default: return } const { screenX, screenY, clientX, clientY } = first const simulatedEvent = new MouseEvent(type, { // Event interface bubbles: true, cancelable: true, // UIEvent interface view: window, detail: 1, // click count // MouseEvent interface (customized) screenX, screenY, clientX, clientY, // MouseEvent interface (defaults) - these could be removed ctrlKey: false, altKey: false, shiftKey: false, metaKey: false, button: 0, // main button (usually left) relatedTarget: null }) if (changedTouches.length < 2) { first.target.dispatchEvent(simulatedEvent) } } export const init = (svgCanvas) => { svgCanvas.svgroot.addEventListener('touchstart', touchHandler) svgCanvas.svgroot.addEventListener('touchmove', touchHandler) svgCanvas.svgroot.addEventListener('touchend', touchHandler) svgCanvas.svgroot.addEventListener('touchcancel', touchHandler) }