UNPKG

rc-tween-one

Version:
277 lines (255 loc) 8.28 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.windowIsUndefined = undefined; exports.toArrayChildren = toArrayChildren; exports.dataToArray = dataToArray; exports.objectEqual = objectEqual; exports.findChildInChildrenByKey = findChildInChildrenByKey; exports.mergeChildren = mergeChildren; exports.transformArguments = transformArguments; exports.getChildrenFromProps = getChildrenFromProps; exports.startConvertToEndUnit = startConvertToEndUnit; exports.parsePath = parsePath; exports.getTransformValue = getTransformValue; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _deepEql = require('deep-eql'); var _deepEql2 = _interopRequireDefault(_deepEql); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var windowIsUndefined = exports.windowIsUndefined = !(typeof window !== 'undefined' && window.document && window.document.createElement); function toArrayChildren(children) { var ret = []; _react2['default'].Children.forEach(children, function (c) { ret.push(c); }); return ret; } function dataToArray(vars) { if (!vars && vars !== 0) { return []; } if (Array.isArray(vars)) { return vars; } return [vars]; } function objectEqual(obj1, obj2) { if (obj1 === obj2 || (0, _deepEql2['default'])(obj1, obj2)) { return true; } if (!obj1 || !obj2) { return false; } // animation 写在标签上的进行判断是否相等, 判断每个参数有没有 function; var equalBool = true; if (Array.isArray(obj1) && Array.isArray(obj2)) { if (obj1.length !== obj2.length) { return false; } for (var i = 0; i < obj1.length; i++) { var currentObj = obj1[i]; var nextObj = obj2[i]; for (var p in currentObj) { // eslint-disable-line no-restricted-syntax if (currentObj[p] !== nextObj[p]) { if (typeof currentObj[p] === 'object' && typeof nextObj[p] === 'object') { equalBool = objectEqual(currentObj[p], nextObj[p]); } else if (typeof currentObj[p] === 'function' && typeof nextObj[p] === 'function') { if (currentObj[p].name !== nextObj[p].name) { equalBool = false; } } else { equalBool = false; return false; } } } } } var setEqualBool = function setEqualBool(objA, objB) { Object.keys(objA).forEach(function (key) { if (!(key in objB)) { equalBool = false; } if (typeof objA[key] === 'object' && typeof objB[key] === 'object') { equalBool = objectEqual(objA[key], objB[key]); } else if (typeof objA[key] === 'function' && typeof objB[key] === 'function') { if (objA[key].name !== objB[key].name) { equalBool = false; } } else if (objA[key] !== objB[key]) { equalBool = false; } }); }; setEqualBool(obj1, obj2); setEqualBool(obj2, obj1); return equalBool; } function findChildInChildrenByKey(children, key) { var ret = null; if (children) { children.forEach(function (c) { if (ret || !c) { return; } if (c.key === key) { ret = c; } }); } return ret; } function mergeChildren(prev, next) { var ret = []; // For each key of `next`, the list of keys to insert before that key in // the combined list var nextChildrenPending = {}; var pendingChildren = []; var followChildrenKey = void 0; prev.forEach(function (c) { if (!c) { return; } if (findChildInChildrenByKey(next, c.key)) { if (pendingChildren.length) { nextChildrenPending[c.key] = pendingChildren; pendingChildren = []; } followChildrenKey = c.key; } else if (c.key) { pendingChildren.push(c); } }); if (!followChildrenKey) { ret = ret.concat(pendingChildren); } next.forEach(function (c) { if (!c) { return; } if (nextChildrenPending.hasOwnProperty(c.key)) { // eslint-disable-line no-prototype-builtins ret = ret.concat(nextChildrenPending[c.key]); } ret.push(c); if (c.key === followChildrenKey) { ret = ret.concat(pendingChildren); } }); return ret; } function transformArguments(arg, key, i) { var result = void 0; if (typeof arg === 'function') { result = arg({ key: key, index: i }); } else { result = arg; } return result; } function getChildrenFromProps(props) { return props && props.children; } function startConvertToEndUnit(target, computedStyle, style, num, unit, dataUnit, fixed, isOriginWidth) { if (windowIsUndefined) { return num; } var horiz = /(?:Left|Right|Width|X)/i.test(style) || isOriginWidth; horiz = style === 'padding' || style === 'marign' ? true : horiz; var t = style.indexOf('border') !== -1 || style.indexOf('translate') !== -1 ? target : target.parentNode || document.body; t = fixed ? document.body : t; var pix = void 0; var htmlComputedStyle = void 0; // transform 在 safari 下会留着单位,chrome 下会全部转换成 px; switch (unit) { case '%': pix = parseFloat(num) / 100 * (horiz ? t.clientWidth : t.clientHeight); break; case 'vw': pix = parseFloat(num) * document.body.clientWidth / 100; break; case 'vh': pix = parseFloat(num) * document.body.clientHeight / 100; break; case 'em': pix = parseFloat(num) * parseFloat(computedStyle.fontSize); break; case 'rem': { htmlComputedStyle = window.getComputedStyle(document.getElementsByTagName('html')[0]); pix = parseFloat(num) * parseFloat(htmlComputedStyle.fontSize); break; } default: pix = parseFloat(num); break; } switch (dataUnit) { case '%': pix = pix ? pix * 100 / (horiz ? t.clientWidth : t.clientHeight) : 0; break; case 'vw': pix = parseFloat(num) / document.body.clientWidth * 100; break; case 'vh': pix = parseFloat(num) / document.body.clientHeight * 100; break; case 'em': pix = parseFloat(num) / parseFloat(computedStyle.fontSize); break; case 'rem': { htmlComputedStyle = htmlComputedStyle || window.getComputedStyle(document.getElementsByTagName('html')[0]); pix = parseFloat(num) / parseFloat(htmlComputedStyle.fontSize); break; } default: break; } return pix; } function parsePath(path) { if (typeof path === 'string') { if (path.charAt(0).match(/m/i)) { var domPath = document.createElementNS('http://www.w3.org/2000/svg', 'path'); domPath.setAttributeNS(null, 'd', path); return domPath; } return document.querySelector(path); } else if (path.style) { return path; } throw new Error('Error while parsing the path'); } function getTransformValue(t) { if (typeof t === 'string') { return t; } var perspective = t.perspective; var angle = t.rotate; var rotateX = t.rotateX; var rotateY = t.rotateY; var sx = t.scaleX; var sy = t.scaleY; var sz = t.scaleZ; var skx = t.skewX; var sky = t.skewY; var translateX = typeof t.translateX === 'string' ? t.translateX : t.translateX + 'px'; var translateY = typeof t.translateY === 'string' ? t.translateY : t.translateY + 'px'; var translateZ = typeof t.translateZ === 'string' ? t.translateZ : t.translateZ + 'px'; var sk = skx || sky ? 'skew(' + skx + 'deg,' + sky + 'deg)' : ''; var an = angle ? 'rotate(' + angle + 'deg)' : ''; var ss = sx !== 1 || sy !== 1 || sz !== 1 ? 'scale3d(' + sx + ',' + sy + ',' + sz + ')' : ''; var rX = rotateX ? 'rotateX(' + rotateX + 'deg)' : ''; var rY = rotateY ? 'rotateY(' + rotateY + 'deg)' : ''; var per = perspective ? 'perspective(' + perspective + 'px)' : ''; var defautlTranslate = ss || an || rX || rY || sk ? '' : 'translate(0px, 0px)'; var translate = t.translateZ ? 'translate3d(' + translateX + ',' + translateY + ',' + translateZ + ')' : (t.translateX || t.translateY) && 'translate(' + translateX + ',' + translateY + ')' || defautlTranslate; return (per + ' ' + translate + ' ' + ss + ' ' + an + ' ' + rX + ' ' + rY + ' ' + sk).trim(); }