UNPKG

dom-helpers

Version:
86 lines (83 loc) 2.48 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _css = _interopRequireDefault(require("./css.js")); var _hyphenate = _interopRequireDefault(require("./hyphenate.js")); var _isTransform = _interopRequireDefault(require("./isTransform.js")); var _transitionEnd = _interopRequireDefault(require("./transitionEnd.js")); const reset = { transition: '', 'transition-duration': '', 'transition-delay': '', 'transition-timing-function': '' }; // super lean animate function for transitions // doesn't support all translations to keep it matching the jquery API /** * code in part from: Zepto 1.1.4 | zeptojs.com/license */ function _animate({ node, properties, duration = 200, easing, callback }) { const cssProperties = []; const cssValues = {}; let transforms = ''; Object.keys(properties).forEach(key => { const value = properties[key]; if ((0, _isTransform.default)(key)) transforms += `${key}(${value}) `;else { cssValues[key] = value; cssProperties.push((0, _hyphenate.default)(key)); } }); if (transforms) { cssValues.transform = transforms; cssProperties.push('transform'); } function done(event) { if (event.target !== event.currentTarget) return; (0, _css.default)(node, reset); if (callback) callback.call(this, event); } if (duration > 0) { cssValues.transition = cssProperties.join(', '); cssValues['transition-duration'] = `${duration / 1000}s`; cssValues['transition-delay'] = '0s'; cssValues['transition-timing-function'] = easing || 'linear'; } const removeListener = (0, _transitionEnd.default)(node, done, duration); // eslint-disable-next-line no-unused-expressions node.clientLeft; // trigger page reflow (0, _css.default)(node, cssValues); return { cancel() { removeListener(); (0, _css.default)(node, reset); } }; } function animate(nodeOrOptions, properties, duration, easing, callback) { if (!('nodeType' in nodeOrOptions)) { return _animate(nodeOrOptions); } if (!properties) { throw new Error('must include properties to animate'); } if (typeof easing === 'function') { callback = easing; easing = ''; } return _animate({ node: nodeOrOptions, properties, duration, easing, callback }); } var _default = exports.default = animate; module.exports = exports.default;