You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.8 KiB
70 lines
1.8 KiB
/** |
|
* Copyright (c) 2013-present, Facebook, Inc. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
* |
|
*/ |
|
|
|
'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; |