function inferInputModel() { if (window.navigator.msPointerEnabled) { return 'pointer'; } else if (window.ontouchstart !== undefined) { return 'touch'; } else { return 'unknown'; } } switch (inferInputModel()) { case 'pointer': element.addEventListener('MSPointerDown', msStart); element.addEventListener('MSPointerOut', msStop); document.addEventListener('MSPointerUp', msStop); document.addEventListener('MSPointerCancel', msStop); document.addEventListener('MSHoldVisual', preventDefault); break; case 'touch': element.addEventListener('touchstart', touchStart); document.addEventListener('touchend', touchStop); element.addEventListener('mousedown', mouseStart); element.addEventListener('mouseout', mouseStop); document.addEventListener('mouseup', mouseStop); break; default: element.addEventListener('mousedown', mouseStart); element.addEventListener('mouseout', mouseStop); document.addEventListener('mouseup', mouseStop); break; }