     ###
     start: (e, view, direction) ->
         @isDragging = true
-        { pageX, pageY } = e
+        { pageX, pageY } = pointerToXY(e)
         @_direction = direction
         @_dragStartX = pageX
         @_dragStartY = pageY
         @_draggingTarget = view
-        @_$window.on('mousemove', @_drag)
-        @_$window.on('mouseup', @_stop)
+        @_$window.on('mousemove touchmove', @_drag)
+        @_$window.on('mouseup touchend touchcancel', @_stop)
         @_$body.addClass("dragging-#{ @_direction }")
 
     _drag: (e) =>
-        { pageX, pageY } = e
+        { pageX, pageY } = pointerToXY(e)
         ui = @_assembleUI(pageX, pageY)
         @_draggingTarget.onDrag?(ui)
 
     _stop: (e) =>
-        @_$window.off('mousemove', @_drag)
-        @_$window.off('mouseup', @_stop)
+        @_$window.off('mousemove touchmove', @_drag)
+        @_$window.off('mouseup touchend touchcancel', @_stop)
         if @_draggingTarget?
-            { pageX, pageY } = e
+            { pageX, pageY } = pointerToXY(e)
             ui = @_assembleUI(pageX, pageY)
             @_draggingTarget.stopDragging?(ui)
             @_reset()

###
Handles drag operations- done globally to enable sliding action that starts on an element but continues across the window
###

                return

            _onDrag = ({ x_start, y_start, x_delta, y_delta }) ->
                options.range.mulStep = Math.floor(x_delta / 15)
                value = nextValueFn(ngModelCtrl.$modelValue, options, false)
                _updateCursor(value)
                scope.$apply( ()->
