jquery.trend.js
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));
    }
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));
    }
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 ) ) ; }
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.
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 .