_layout(items) {
    const itemPositions = this._getNextPositions(items);

    let count = 0;
    items.forEach((item, i) => {
      function callback() {
        item.applyCss(ShuffleItem.Css.VISIBLE.after);
      }

      // If the item will not change its position, do not add it to the render
      // queue. Transitions don't fire when setting a property to the same value.
      if (Point.equals(item.point, itemPositions[i]) && !item.isHidden) {
        item.applyCss(ShuffleItem.Css.VISIBLE.before);
        callback();
        return;
      }

      item.point = itemPositions[i];
      item.scale = ShuffleItem.Scale.VISIBLE;
      item.isHidden = false;

      // Clone the object so that the `before` object isn't modified when the
      // transition delay is added.
      const styles = this.getStylesForTransition(item, ShuffleItem.Css.VISIBLE.before);
      styles.transitionDelay = `${this._getStaggerAmount(count)}ms`;

      this._queue.push({
        item,
        styles,
        callback,
      });

      count += 1;
    });
  }
Loops through each item that should be shown and calculates the x, y position.
@param {ShuffleItem[]} items Array of items that will be shown/layed
    out in order in their array.