code: function DragControlMethod(element, pointerType, opts) {
    this._element = element;
  
    this._opts = defaults(opts || {}, defaultOptions);
  
    this._startEvent = null;
    this._lastEvent = null;
  
    this._active = false;
  
    this._dynamics = {
      x: new Dynamics(),
      y: new Dynamics()
    };
  
    this._hammer = HammerGestures.get(element, pointerType);
  
    this._hammer.on("hammer.input", this._handleHammerEvent.bind(this));
  
    this._hammer.on('panstart', this._handleStart.bind(this));
    this._hammer.on('panmove', this._handleMove.bind(this));
    this._hammer.on('panend', this._handleEnd.bind(this));
    this._hammer.on('pancancel', this._handleEnd.bind(this));
  
  }
docs: @class DragControlMethod
  @implements ControlMethod
  @classdesc
  
  Controls the view by clicking/tapping and dragging.
  
  @param {Element} element Element to listen for events.
  @param {string} pointerType Which Hammer.js pointer type to use (e.g.
  `mouse` or `touch`).
  @param {Object} opts
  @param {number} opts.friction
  @param {number} opts.maxFrictionTime