start(action, interactable, element) {
    if (this.interacting() || !this.pointerIsDown || this.pointers.length < (action.name === 'gesture' ? 2 : 1) || !interactable.options[action.name].enabled) {
      return false;
    }

    copyAction(this.prepared, action);
    this.interactable = interactable;
    this.element = element;
    this.rect = interactable.getRect(element);
    this.edges = this.prepared.edges ? extend({}, this.prepared.edges) : {
      left: true,
      right: true,
      top: true,
      bottom: true
    };
    this._stopped = false;
    this._interacting = this._doPhase({
      interaction: this,
      event: this.downEvent,
      phase: 'start'
    }) && !this._stopped;
    return this._interacting;
  }
```js
interact(target)
  .draggable({
    // disable the default drag start by down->move
    manualStart: true
  })
  // start dragging after the user holds the pointer down
  .on('hold', function (event) {
    var interaction = event.interaction

    if (!interaction.interacting()) {
      interaction.start({ name: 'drag' },
                        event.interactable,
                        event.currentTarget)
    }
})
```

Start an action with the given Interactable and Element as tartgets. The
action must be enabled for the target Interactable and an appropriate
number of pointers must be held down - 1 for drag/resize, 2 for gesture.

Use it with `interactable.<action>able({ manualStart: false })` to always
[start actions manually](https://github.com/taye/interact.js/issues/114)

@param {object} action   The action to be performed - drag, resize, etc.
@param {Interactable} target  The Interactable to target
@param {Element} element The DOM Element to target
@return {Boolean} Whether the interaction was successfully started