     foldUp: {}
 
 
+  # Touch / Drag Event Handlers
+  # ===========================
+
+
+  # This method is called when a finger or mouse button is pressed on the element.
+  _onTouchStart: (e) =>
+    return unless @_touchEnabled
+    e.preventDefault()
+    # Disable tweening to enable instant 1 to 1 movement.
+    @_setTweening false
+    # Derive the axis to fold on.
+    @_touchAxis = if @lastAnchor is 'left' or @lastAnchor is 'right' then 'x' else 'y'
+    # Set a reference to the last folded angle to accurately derive deltas.
+    @["_#{ @_touchAxis }Last"] = @lastAngle
+
+    # Determine the starting tap's coordinate for touch and mouse events.
+    if e.type is 'mousedown'
+      @["_#{ @_touchAxis }1"] = e["page#{ @_touchAxis.toUpperCase() }"]
+    else
+      @["_#{ @_touchAxis }1"] = e.targetTouches[0]["page#{ @_touchAxis.toUpperCase() }"]
+
+    # Return that value to an external listener.
+    @settings.touchStartCallback @["_#{ @_touchAxis }1"]
+
+
+  # Called on touch/mouse movement.
+  _onTouchMove: (e) =>
+    return unless @_touchEnabled
+    e.preventDefault()
+    # Set a reference to the current x or y position.
+    # Cancel if the mouse button isn't down.
+    if e.type is 'mousemove'
+      return if e.which isnt 1
+      current = e["page#{ @_touchAxis.toUpperCase() }"]
+    else
+      current = e.targetTouches[0]["page#{ @_touchAxis.toUpperCase() }"]
+
+    # Calculate distance and multiply by `touchSensitivity`.
+    distance = (current - @["_#{ @_touchAxis }1"]) * @settings.touchSensitivity
+
+    # Calculate final delta based on starting angle and anchor.
+    if @lastAnchor is 'right' or @lastAnchor is 'bottom'
+      delta = @["_#{ @_touchAxis }Last"] + distance
+    else
+      delta = @["_#{ @_touchAxis }Last"] - distance
+
+    # Prevent negative angles.
+    delta = 0 if delta < 0
+
+    # Invoke the effect method with the delta as an angle argument.
+    @[@settings.touchEffect] delta
+    # Pass the delta to the movement callback.
+    @settings.touchMoveCallback delta
+
+
+  # Teardown process when touch/drag event ends.
+  _onTouchEnd: (e) =>
+    return unless @_touchEnabled
+    # Enable tweening again.
+    @_setTweening true
+    # Pass callback final value.
+    @settings.touchEndCallback @["_#{ @_touchAxis }Last"]
+
+
   # Public Methods
   # ==============
 

    @el.style.outline = 'none'
    # Show the left stage to start with.
    @stages.left.style.display = 'block'
    # Empty the target element.
    @stageEl = document.createElement 'div'

    # Append each stage to the target element.
    for anchor in @anchors

      callback?()


  # Enables touch events and sets cursor.
  enableTouch: ->
    @_touchEnabled = true
    @_setCursor()


  # Disables touch events.
  disableTouch: ->
    @_touchEnabled = false
    @_setCursor()


  # Convenient way to retrieve an oriDomi instance from jQuery object.
  # For example, `$oriDiv.oriDomi('getInstance')` will return the oriDomi instance
  # instead of the jQuery selection.
