function prepareMoveTransition (frags) {
      var transition =
        transitionEndEvent && // css transition supported?
        frags && frags.length && // has frags to be moved?
        frags[0].node.__v_trans // has transitions?
      if (transition) {
        var node = frags[0].node
        var moveClass = transition.id + '-move'
        var moving = node._pendingMoveCb
        var hasTransition = false
        if (!moving) {
          // sniff whether element has a transition duration for transform
          // with the move class applied
          addClass(node, moveClass)
          var type = transition.getCssTransitionType(moveClass)
          if (type === 'transition') {
            var computedStyles = window.getComputedStyle(node)
            var transitionedProps = computedStyles[transitionProp + 'Property']
            if (/\btransform(,|$)/.test(transitionedProps)) {
              hasTransition = true
            }
          }
          removeClass(node, moveClass)
        }
        if (moving || hasTransition) {
          frags.forEach(function (frag) {
            frag._oldPos = frag.node.getBoundingClientRect()
          })
          return true
        }
      }
    }
Check if move transitions are needed, and if so,
record the bounding client rects for each item.

@param {Array<Fragment>|undefined} frags
@return {Boolean|undefined}