constructor (options={}) {

    let defaults = {
      duration: 330,
      delay: 0,
      easing: function (t) { return t; },
      transform: true,
      opacity: true,
      play: 'rAF'
    };

    let config = Object.assign({}, defaults, options);

    if (typeof config.element === 'undefined')
      throw new Error('Element must be provided.');

    // If the easing property is not a function, check for a TweenMax/Lite style
    // object with a getRatio function, and, if that exists, use it, otherwise
    // throw an error.
    if (typeof config.easing !== 'function') {
      if (typeof config.easing.getRatio !== 'undefined') {
        config.easing = config.easing.getRatio;
      } else {
        throw new Error('Easing function must be provided.');
      }
    }

    this.element_ = config.element;
    this.first_ = {
      layout: null,
      opacity: 0
    };

    this.last_ = {
      layout: null,
      opacity: 0
    };

    this.invert_ = {
      x: 0, y: 0, sx: 1, sy: 1, a: 0
    };

    this.start_ = 0;
    this.duration_ = config.duration;
    this.delay_ = config.delay;
    this.easing_ = config.easing;
    this.updateTransform_ = config.transform;
    this.updateOpacity_ = config.opacity;

    let player = FLIP.players_[config.play];

    if (typeof player === 'undefined')
      throw new Error(`Unknown player type: ${config.play}`);

    // Take a copy of the player's functions and bind them on so that
    // they can be used by this FLIP Helper instance.
    let playerFunctions = Object.keys(player);
    let playerFunction;
    playerFunctions.forEach(fn => {
      playerFunction = player[fn];
      this[fn] = playerFunction.bind(this);
    });

    this.guid =
        (Math.round(Math.random() * Number.MAX_SAFE_INTEGER)).toString(16);
  }
Creates a new FLIP helper.

@param {Object} config - The configuration for the helper.
@param {HTMLElement} config.element - The element on which to operate.
@param {Number} [config.duration=1000] - The duration of the animation
 in milliseconds.
@param {Function} [config.ease] - The easing function of the animation.
@param {Boolean} [config.transform=true] - Whether or not to animate
 transforms for the element.
@param {Boolean} [config.opacity=true] - Whether or not to animate opacity
 for the element.