_cycleTo(n, callback) {
      let diff = this.center % this.count - n;

      // Account for wraparound.
      if (!this.noWrap) {
        if (diff < 0) {
          if (Math.abs(diff + this.count) < Math.abs(diff)) {
            diff += this.count;
          }
        } else if (diff > 0) {
          if (Math.abs(diff - this.count) < diff) {
            diff -= this.count;
          }
        }
      }

      this.target = this.dim * Math.round(this.offset / this.dim);
      // Next
      if (diff < 0) {
        this.target += this.dim * Math.abs(diff);

        // Prev
      } else if (diff > 0) {
        this.target -= this.dim * diff;
      }

      // Set one time callback
      if (typeof callback === 'function') {
        this.oneTimeCallback = callback;
      }

      // Scroll
      if (this.offset !== this.target) {
        this.amplitude = this.target - this.offset;
        this.timestamp = Date.now();
        requestAnimationFrame(this._autoScrollBound);
      }
    }
Cycle to target
@param {Number} n
@param {Function} callback