ReactCSSTransitionGroup实现子节点挂载、添加、移除时的css动画。
'use strict'; var _assign = require('object-assign'); // 构造函数作为普通函数调用报错 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // subClass继承superClass时使用,self为subClass实例,call为superClass作为普通函数执行后的返回值 // 且以subClass实例为上下文,使得subClass继承superClass的静态属性和方法 // superClass作为普通函数调用时有返回值,输出该返回值;无,输出subClass实例 function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } // subClass继承superClass的原型属性 function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var React = require('./React'); // 渲染子组件的同时,并管控子组件样式类切换时机 var ReactTransitionGroup = require('./ReactTransitionGroup'); // 实现子组件样式切换的机制 var ReactCSSTransitionGroupChild = require('./ReactCSSTransitionGroupChild'); // props.transitionAppear设为真值时,校验props.transitionAppearTimeout不为null或undefined、且为数值型等 function createTransitionTimeoutPropValidator(transitionType) { var timeoutPropName = 'transition' + transitionType + 'Timeout'; var enabledPropName = 'transition' + transitionType; return function (props) { if (props[enabledPropName]) { if (props[timeoutPropName] == null) { return new Error(timeoutPropName + ' wasn\'t supplied to ReactCSSTransitionGroup: ' + 'this can cause unreliable animations and won\'t be supported in ' + 'a future version of React. See ' + 'https://fb.me/react-animation-transition-group-timeout for more ' + 'information.'); } else if (typeof props[timeoutPropName] !== 'number') { return new Error(timeoutPropName + ' must be a number (in milliseconds)'); } } }; } var ReactCSSTransitionGroup = function (_React$Component) { _inherits(ReactCSSTransitionGroup, _React$Component); function ReactCSSTransitionGroup() { var _temp, _this, _ret; _classCallCheck(this, ReactCSSTransitionGroup); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } // 逗号运算符 return _ret = ( _temp = ( _this = _possibleConstructorReturn( this, // ReactComponent作为普通函数调用,以当前实例this为上下文,赋值this.props|context|updater等 // 返回值为undefined,_possibleConstructorReturn函数最终输出为ReactCSSTransitionGroup实例this _React$Component.call.apply(_React$Component, [this].concat(args)) ), _this ), // 劫持渲染子节点的工厂函数,通过ReactCSSTransitionGroupChild组件实现样式类切换机制 _this._wrapChild = function (child) { return React.createElement(ReactCSSTransitionGroupChild, { // 设定子节点的样式类名称appear、enter、leave name: _this.props.transitionName, // 是否要启动appear、enter、leave状况下的css动画效果 appear: _this.props.transitionAppear, enter: _this.props.transitionEnter, leave: _this.props.transitionLeave, // appear、enter、leave状况下的css动画持续时间 appearTimeout: _this.props.transitionAppearTimeout, enterTimeout: _this.props.transitionEnterTimeout, leaveTimeout: _this.props.transitionLeaveTimeout }, child); }, _temp ), _possibleConstructorReturn(_this, _ret); } // 通过ReactTransitionGroup组件渲染子组件的同时,管控子组件样式类切换时机 ReactCSSTransitionGroup.prototype.render = function render() { return React.createElement(ReactTransitionGroup, _assign({}, this.props, { childFactory: this._wrapChild })); }; return ReactCSSTransitionGroup; }(React.Component); ReactCSSTransitionGroup.displayName = 'ReactCSSTransitionGroup'; ReactCSSTransitionGroup.propTypes = { // 字符串或对象形式设定appear、enter、leave样式类 transitionName: ReactCSSTransitionGroupChild.propTypes.name, // 是否启用appear、enter、leave样式类切换 transitionAppear: React.PropTypes.bool, transitionEnter: React.PropTypes.bool, transitionLeave: React.PropTypes.bool, // appear、enter、leave样式类样式类的持续时间 transitionAppearTimeout: createTransitionTimeoutPropValidator('Appear'), transitionEnterTimeout: createTransitionTimeoutPropValidator('Enter'), transitionLeaveTimeout: createTransitionTimeoutPropValidator('Leave') }; ReactCSSTransitionGroup.defaultProps = { transitionAppear: false, transitionEnter: true, transitionLeave: true }; // 调用ReactTransitionGroup劫持渲染组件元素,调用ReactCSSTransitionGroupChild渲染子节点 // 控制子节点挂载appear、添加enter、移除leave时的动画样式 module.exports = ReactCSSTransitionGroup;
相关推荐
`ReactCSSTransitionGroup`是React官方提供的一个用于添加进入/离开过渡效果的组件,它依赖于CSS来实现这些动画。然而,如果你希望用JavaScript来控制更复杂的动画效果,比如更丰富的缓动函数、更灵活的动画属性,...
ReactCSSTransitionGroup是React官方提供的一个组件,用于在DOM元素的添加、删除或更新时添加简单的过渡和动画效果。它利用CSS类来触发和控制动画,使得开发者可以通过编写CSS来定义各种动画行为。 **ng-animate与...
这个辅助组件采用ReactCSSTransitionGroup的简单性并将其应用于 Javascript 动画。 这处理了在 Greensock TweenMax 等动画框架中运行一些过渡的最简单情况,它允许比 CSS 更强大的动画。 注意:仅适用于过渡的单个...
奥吉吉亚一个实验场,用于... 风格转换组测试台,其功能几乎与插件ReactCSSTransitionGroup相同,但它可以应用一组样式(可以在渲染时生成)而不是更改类。浏览器支持这仍然是非常实验性的,因此目前仅支持Chrome 。
该组件旨在确切地说是与ReactCSSTransitionGroup紧跟的API。 使用react-css-transition-replace提供两个明显的好处: 它会自动处理动画组件的位置,并且允许在各种内容高度不同的情况下轻松处理和更改容器高度的动画...
在动画方面,React通过其虚拟DOM机制,可以高效地更新和渲染动画,同时提供了如ReactTransitionGroup和ReactCSSTransitionGroup等库,为开发者提供了便捷的动画解决方案。 项目"Discoverers"的源代码包含了多个子...
React提供了一些原生的动画支持,如`ReactTransitionGroup`和`ReactCSSTransitionGroup`,可以实现平滑的过渡效果。此外,还可以结合第三方库如`react-spring`或`react-motion`来实现更复杂的动画场景。 JavaScript...
React待办事项列表 只是另一个待办事项,但使用 React.js 进行 JavaScript Meetup #6:React....这个项目是为了演示 React 和 ReactCSSTransitionGroup 的单向数据流 跑步! $gulp // Run this project in localhost
传统类型-开发人员可以使用ReactCSSTransitionGroup通过道具选择要使用的传统 动态模态又称模态数量-只需保持状态对象中所述的模态的parentId(以使应用知道打开/关闭哪个模态) 模态中的“陷阱”选项卡,退出后-...
ReactCSSTransitionGroup Redux-Dev-工具 用于生产的Express服务器 安装 git clone https://github.com/a-mujthaba321/react-semantic-boilerplate.git cd react-semantic-ui-boilerplate npm安装 npm开始 访问...