72 lines
1.9 KiB
JavaScript
72 lines
1.9 KiB
JavaScript
|
/**
|
||
|
* Copyright 2013-present, Facebook, Inc.
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
* This source code is licensed under the BSD-style license found in the
|
||
|
* LICENSE file in the root directory of this source tree. An additional grant
|
||
|
* of patent rights can be found in the PATENTS file in the same directory.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
var ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');
|
||
|
|
||
|
var getVendorPrefixedEventName = require('react-dom/lib/getVendorPrefixedEventName');
|
||
|
|
||
|
var endEvents = [];
|
||
|
|
||
|
function detectEvents() {
|
||
|
var animEnd = getVendorPrefixedEventName('animationend');
|
||
|
var transEnd = getVendorPrefixedEventName('transitionend');
|
||
|
|
||
|
if (animEnd) {
|
||
|
endEvents.push(animEnd);
|
||
|
}
|
||
|
|
||
|
if (transEnd) {
|
||
|
endEvents.push(transEnd);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (ExecutionEnvironment.canUseDOM) {
|
||
|
detectEvents();
|
||
|
}
|
||
|
|
||
|
// We use the raw {add|remove}EventListener() call because EventListener
|
||
|
// does not know how to remove event listeners and we really should
|
||
|
// clean up. Also, these events are not triggered in older browsers
|
||
|
// so we should be A-OK here.
|
||
|
|
||
|
function addEventListener(node, eventName, eventListener) {
|
||
|
node.addEventListener(eventName, eventListener, false);
|
||
|
}
|
||
|
|
||
|
function removeEventListener(node, eventName, eventListener) {
|
||
|
node.removeEventListener(eventName, eventListener, false);
|
||
|
}
|
||
|
|
||
|
var ReactTransitionEvents = {
|
||
|
addEndEventListener: function (node, eventListener) {
|
||
|
if (endEvents.length === 0) {
|
||
|
// If CSS transitions are not supported, trigger an "end animation"
|
||
|
// event immediately.
|
||
|
window.setTimeout(eventListener, 0);
|
||
|
return;
|
||
|
}
|
||
|
endEvents.forEach(function (endEvent) {
|
||
|
addEventListener(node, endEvent, eventListener);
|
||
|
});
|
||
|
},
|
||
|
|
||
|
removeEndEventListener: function (node, eventListener) {
|
||
|
if (endEvents.length === 0) {
|
||
|
return;
|
||
|
}
|
||
|
endEvents.forEach(function (endEvent) {
|
||
|
removeEventListener(node, endEvent, eventListener);
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
|
||
|
module.exports = ReactTransitionEvents;
|