| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- "use strict";
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.isCssAnimationSupported = exports.default = void 0;
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
- var _Event = _interopRequireDefault(require("./Event"));
- var _componentClasses = _interopRequireDefault(require("../component-classes"));
- var _requestAnimationTimeout = require("../requestAnimationTimeout");
- var _env = require("../env");
- // https://github.com/yiminghe/css-animation 1.5.0
- var isCssAnimationSupported = _Event.default.endEvents.length !== 0;
- exports.isCssAnimationSupported = isCssAnimationSupported;
- var capitalPrefixes = ['Webkit', 'Moz', 'O',
- // ms is special .... !
- 'ms'];
- var prefixes = ['-webkit-', '-moz-', '-o-', 'ms-', ''];
- function getStyleProperty(node, name) {
- if (_env.inBrowser) return '';
- // old ff need null, https://developer.mozilla.org/en-US/docs/Web/API/Window/getComputedStyle
- var style = window.getComputedStyle(node, null);
- var ret = '';
- for (var i = 0; i < prefixes.length; i++) {
- ret = style.getPropertyValue(prefixes[i] + name);
- if (ret) {
- break;
- }
- }
- return ret;
- }
- function fixBrowserByTimeout(node) {
- if (isCssAnimationSupported) {
- var transitionDelay = parseFloat(getStyleProperty(node, 'transition-delay')) || 0;
- var transitionDuration = parseFloat(getStyleProperty(node, 'transition-duration')) || 0;
- var animationDelay = parseFloat(getStyleProperty(node, 'animation-delay')) || 0;
- var animationDuration = parseFloat(getStyleProperty(node, 'animation-duration')) || 0;
- var time = Math.max(transitionDuration + transitionDelay, animationDuration + animationDelay);
- // sometimes, browser bug
- node.rcEndAnimTimeout = setTimeout(function () {
- node.rcEndAnimTimeout = null;
- if (node.rcEndListener) {
- node.rcEndListener();
- }
- }, time * 1000 + 200);
- }
- }
- function clearBrowserBugTimeout(node) {
- if (node.rcEndAnimTimeout) {
- clearTimeout(node.rcEndAnimTimeout);
- node.rcEndAnimTimeout = null;
- }
- }
- var cssAnimation = function cssAnimation(node, transitionName, endCallback) {
- var nameIsObj = (0, _typeof2.default)(transitionName) === 'object';
- var className = nameIsObj ? transitionName.name : transitionName;
- var activeClassName = nameIsObj ? transitionName.active : "".concat(transitionName, "-active");
- var end = endCallback;
- var start;
- var active;
- var nodeClasses = (0, _componentClasses.default)(node);
- if (endCallback && Object.prototype.toString.call(endCallback) === '[object Object]') {
- end = endCallback.end;
- start = endCallback.start;
- active = endCallback.active;
- }
- if (node.rcEndListener) {
- node.rcEndListener();
- }
- node.rcEndListener = function (e) {
- if (e && e.target !== node) {
- return;
- }
- if (node.rcAnimTimeout) {
- (0, _requestAnimationTimeout.cancelAnimationTimeout)(node.rcAnimTimeout);
- node.rcAnimTimeout = null;
- }
- clearBrowserBugTimeout(node);
- nodeClasses.remove(className);
- nodeClasses.remove(activeClassName);
- _Event.default.removeEndEventListener(node, node.rcEndListener);
- node.rcEndListener = null;
- // Usually this optional end is used for informing an owner of
- // a leave animation and telling it to remove the child.
- if (end) {
- end();
- }
- };
- _Event.default.addEndEventListener(node, node.rcEndListener);
- if (start) {
- start();
- }
- nodeClasses.add(className);
- node.rcAnimTimeout = (0, _requestAnimationTimeout.requestAnimationTimeout)(function () {
- node.rcAnimTimeout = null;
- nodeClasses.add(className);
- nodeClasses.add(activeClassName);
- if (active) {
- (0, _requestAnimationTimeout.requestAnimationTimeout)(active, 0);
- }
- fixBrowserByTimeout(node);
- // 30ms for firefox
- }, 30);
- return {
- stop: function stop() {
- if (node.rcEndListener) {
- node.rcEndListener();
- }
- }
- };
- };
- cssAnimation.style = function (node, style, callback) {
- if (node.rcEndListener) {
- node.rcEndListener();
- }
- node.rcEndListener = function (e) {
- if (e && e.target !== node) {
- return;
- }
- if (node.rcAnimTimeout) {
- (0, _requestAnimationTimeout.cancelAnimationTimeout)(node.rcAnimTimeout);
- node.rcAnimTimeout = null;
- }
- clearBrowserBugTimeout(node);
- _Event.default.removeEndEventListener(node, node.rcEndListener);
- node.rcEndListener = null;
- // Usually this optional callback is used for informing an owner of
- // a leave animation and telling it to remove the child.
- if (callback) {
- callback();
- }
- };
- _Event.default.addEndEventListener(node, node.rcEndListener);
- node.rcAnimTimeout = (0, _requestAnimationTimeout.requestAnimationTimeout)(function () {
- for (var s in style) {
- if (style.hasOwnProperty(s)) {
- node.style[s] = style[s];
- }
- }
- node.rcAnimTimeout = null;
- fixBrowserByTimeout(node);
- }, 0);
- };
- cssAnimation.setTransition = function (node, p, value) {
- var property = p;
- var v = value;
- if (value === undefined) {
- v = property;
- property = '';
- }
- property = property || '';
- capitalPrefixes.forEach(function (prefix) {
- node.style["".concat(prefix, "Transition").concat(property)] = v;
- });
- };
- cssAnimation.isCssAnimationSupported = isCssAnimationSupported;
- var _default = cssAnimation;
- exports.default = _default;
|