Skip to content

Commit 0d493e2

Browse files
committed
add appear
1 parent 722fc72 commit 0d493e2

File tree

3 files changed

+34
-38
lines changed

3 files changed

+34
-38
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ ReactDom.render(
6666
| interval | number / array | 100 | interval of duration |
6767
| leaveReverse | boolean | false | reverse animation order at leave |
6868
| ease | string / array | `easeOutQuart` | animation easing config like `'ease'`, `['easeIn', 'easeOut']`, `[[.42,0,.58,1]`, [.42,0,.58,1]]: [more](http://julian.com/research/velocity/#easing) |
69+
| appear | boolean | true | whether support appear anim |
6970
| component | string | `div` | component tag |
7071
| animatingClassName | array | `['queue-anim-entering', 'queue-anim-leaving']` | className to every element of animating |
7172
| onEnd | function | null | animate end callback({ key, type }), type: `enter` or `leave` |

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "rc-queue-anim",
3-
"version": "0.12.6",
3+
"version": "0.13.0",
44
"description": "Queue animation component for react",
55
"keywords": [
66
"react",

src/QueueAnim.jsx

Lines changed: 32 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -121,30 +121,30 @@ class QueueAnim extends React.Component {
121121

122122
// 第一次进入,默认进场
123123
const children = toArrayChildren(getChildrenFromProps(this.props));
124+
const childrenShow = {};
124125
children.forEach(child => {
125126
if (!child || !child.key) {
126127
return;
127128
}
128-
this.keysToEnter.push(child.key);
129+
if (this.props.appear) {
130+
this.keysToEnter.push(child.key);
131+
} else {
132+
childrenShow[child.key] = true;
133+
}
129134
});
130135

131136
this.originalChildren = toArrayChildren(getChildrenFromProps(this.props));
132137

133138
this.state = {
134139
children,
135-
childrenShow: {},
140+
childrenShow,
136141
};
137-
138-
[
139-
'performEnter',
140-
'performLeave',
141-
'enterBegin',
142-
'leaveComplete',
143-
].forEach((method) => this[method] = this[method].bind(this));
144142
}
145143

146144
componentDidMount() {
147-
this.componentDidUpdate();
145+
if (this.props.appear) {
146+
this.componentDidUpdate();
147+
}
148148
}
149149

150150
componentWillReceiveProps(nextProps) {
@@ -224,18 +224,18 @@ class QueueAnim extends React.Component {
224224
this.keysAnimating = [];
225225
}
226226

227-
getVelocityConfig(index, ...args) {
227+
getVelocityConfig = (index, ...args) => {
228228
if (this.props.animConfig) {
229229
return transformArguments(this.props.animConfig, ...args)[index];
230230
}
231231
return AnimTypes[transformArguments(this.props.type, ...args)[index]];
232232
}
233233

234-
getVelocityEnterConfig(...args) {
234+
getVelocityEnterConfig = (...args) => {
235235
return this.getVelocityConfig(0, ...args);
236236
}
237237

238-
getVelocityLeaveConfig(...args) {
238+
getVelocityLeaveConfig = (...args) => {
239239
const config = this.getVelocityConfig(1, ...args);
240240
const ret = {};
241241
Object.keys(config).forEach((key) => {
@@ -248,7 +248,7 @@ class QueueAnim extends React.Component {
248248
return ret;
249249
}
250250

251-
getVelocityEasing(...args) {
251+
getVelocityEasing = (...args) => {
252252
return transformArguments(this.props.ease, ...args).map((easeName) => {
253253
if (typeof easeName === 'string') {
254254
return BackEase[easeName] || easeName;
@@ -293,7 +293,7 @@ class QueueAnim extends React.Component {
293293
return data;
294294
};
295295

296-
performEnter(key, i) {
296+
performEnter = (key, i) => {
297297
const interval = transformArguments(this.props.interval, key, i)[0];
298298
const delay = transformArguments(this.props.delay, key, i)[0];
299299
this.placeholderTimeoutIds[key] = setTimeout(
@@ -305,13 +305,13 @@ class QueueAnim extends React.Component {
305305
}
306306
}
307307

308-
performEnterBegin(key, i) {
308+
performEnterBegin = (key, i) => {
309309
const childrenShow = this.state.childrenShow;
310310
childrenShow[key] = true;
311311
this.setState({ childrenShow }, this.realPerformEnter.bind(this, key, i));
312312
}
313313

314-
realPerformEnter(key, i) {
314+
realPerformEnter = (key, i) => {
315315
const node = findDOMNode(this.refs[key]);
316316
if (!node) {
317317
return;
@@ -332,7 +332,7 @@ class QueueAnim extends React.Component {
332332
});
333333
}
334334

335-
performLeave(key, i) {
335+
performLeave = (key, i) => {
336336
clearTimeout(this.placeholderTimeoutIds[key]);
337337
delete this.placeholderTimeoutIds[key];
338338
const node = findDOMNode(this.refs[key]);
@@ -355,7 +355,7 @@ class QueueAnim extends React.Component {
355355
});
356356
}
357357

358-
enterBegin(key, elements) {
358+
enterBegin = (key, elements) => {
359359
elements.forEach((elem) => {
360360
const animatingClassName = this.props.animatingClassName;
361361
elem.className = elem.className.replace(animatingClassName[1], '');
@@ -365,7 +365,7 @@ class QueueAnim extends React.Component {
365365
});
366366
}
367367

368-
enterComplete(key, elements) {
368+
enterComplete = (key, elements) => {
369369
if (this.keysAnimating.indexOf(key) >= 0) {
370370
this.keysAnimating.splice(this.keysAnimating.indexOf(key), 1);
371371
}
@@ -375,7 +375,7 @@ class QueueAnim extends React.Component {
375375
this.props.onEnd({ key, type: 'enter' });
376376
}
377377

378-
leaveBegin(key, elements) {
378+
leaveBegin = (key, elements) => {
379379
elements.forEach((elem) => {
380380
const animatingClassName = this.props.animatingClassName;
381381
elem.className = elem.className.replace(animatingClassName[0], '');
@@ -385,7 +385,7 @@ class QueueAnim extends React.Component {
385385
});
386386
}
387387

388-
leaveComplete(key, elements) {
388+
leaveComplete = (key, elements) => {
389389
if (this.keysAnimating.indexOf(key) < 0) {
390390
return;
391391
}
@@ -435,31 +435,25 @@ class QueueAnim extends React.Component {
435435
'animatingClassName',
436436
'enterForcedRePlay',
437437
'onEnd',
438+
'appear',
438439
].forEach(key => delete tagProps[key]);
439440
return createElement(this.props.component, { ...tagProps }, childrenToRender);
440441
}
441442
}
442443

443-
const numberOrArray = React.PropTypes.oneOfType([React.PropTypes.number, React.PropTypes.array]);
444-
const stringOrArray = React.PropTypes.oneOfType([React.PropTypes.string, React.PropTypes.array]);
445-
const objectOrArray = React.PropTypes.oneOfType([React.PropTypes.object, React.PropTypes.array]);
446-
const funcOrString = React.PropTypes.oneOfType([React.PropTypes.func, React.PropTypes.string]);
447-
const funcOrStringOrArray = React.PropTypes.oneOfType([React.PropTypes.func, stringOrArray]);
448-
const funcOrObjectOrArray = React.PropTypes.oneOfType([React.PropTypes.func, objectOrArray]);
449-
const funcOrNumberOrArray = React.PropTypes.oneOfType([React.PropTypes.func, numberOrArray]);
450-
451444
QueueAnim.propTypes = {
452-
component: funcOrString,
453-
interval: numberOrArray,
454-
duration: funcOrNumberOrArray,
455-
delay: funcOrNumberOrArray,
456-
type: funcOrStringOrArray,
457-
animConfig: funcOrObjectOrArray,
458-
ease: funcOrStringOrArray,
445+
component: React.PropTypes.any,
446+
interval: React.PropTypes.any,
447+
duration: React.PropTypes.any,
448+
delay: React.PropTypes.any,
449+
type: React.PropTypes.any,
450+
animConfig: React.PropTypes.any,
451+
ease: React.PropTypes.any,
459452
leaveReverse: React.PropTypes.bool,
460453
enterForcedRePlay: React.PropTypes.bool,
461454
animatingClassName: React.PropTypes.array,
462455
onEnd: React.PropTypes.func,
456+
appear: React.PropTypes.bool,
463457
};
464458

465459
QueueAnim.defaultProps = {
@@ -474,6 +468,7 @@ QueueAnim.defaultProps = {
474468
enterForcedRePlay: false,
475469
animatingClassName: ['queue-anim-entering', 'queue-anim-leaving'],
476470
onEnd: noop,
471+
appear: true,
477472
};
478473

479474
export default QueueAnim;

0 commit comments

Comments
 (0)