code: function(handleObj) {
        var el = $(this);
        var fired = false;
  
        // Mark element as being in transition
        el.data("trend", true);
  
        // Calculate a fallback duration. + 20 because some browsers fire
        // timeouts faster than transitionend.
        var time =
          parseProperties(el, transitionDurationProperties) +
          parseProperties(el, transitionDelayProperties) +
          20;
  
        var cb = function(e) {
          // transitionend events can be sent for each property. Let's just
          // skip all but the first. Also handles the timeout callback.
          if (fired) return;
  
          // Child elements that also have transitions can be fired before we
          // complete. This will catch and ignore those. Unfortunately, we'll
          // have to rely on the timeout in these cases.
          if (e && e.srcElement !== el[0]) return;
  
          // Mark element has not being in transition
          el.data("trend", false);
  
          // Callback
          fired = true;
          if (handleObj.handler) handleObj.handler();
        };
  
        el.one(transitionEndEvents, cb);
        el.data("trend-timeout", window.setTimeout(cb, time));
      }
docs: Triggers an event handler when an element is done transitioning.  Handles browsers that don't support transitionend by adding a timeout with the transition duration.