Skip to content

Commit 74904c4

Browse files
Brookszewa666
authored andcommitted
fix(stagger): add leave animation stagger (#62)
missing animation stagger for au-stagger-leave fix stagger animation tests
1 parent bb85e90 commit 74904c4

File tree

3 files changed

+23
-18
lines changed

3 files changed

+23
-18
lines changed

src/animator.js

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,6 @@ export class CssAnimator {
307307

308308
// Step 4: check if parent element is defined to stagger animations otherwise trigger active immediately
309309
const parent = element.parentElement;
310-
let delay = 0;
311310
const attrib = 'data-animator-pending' + direction;
312311

313312
const cleanupAnimation = () => {
@@ -326,15 +325,11 @@ export class CssAnimator {
326325
parent && parent.setAttribute(attrib, +(parent.getAttribute(attrib) || 1) - 1);
327326
};
328327

329-
if (parent !== null &&
330-
parent !== undefined &&
331-
(
332-
parent.classList.contains('au-stagger') ||
333-
parent.classList.contains('au-stagger-enter')
334-
)) {
328+
if (parent !== null && parent !== undefined &&
329+
(parent.classList.contains('au-stagger') || parent.classList.contains('au-stagger-' + direction))) {
335330
const offset = +(parent.getAttribute(attrib) || 0);
336331
parent.setAttribute(attrib, offset + 1);
337-
delay = this._getElementAnimationDelay(parent) * offset;
332+
const delay = this._getElementAnimationDelay(parent) * offset;
338333
this._triggerDOMEvent(animationEvent.staggerNext, element);
339334

340335
setTimeout(() => {
@@ -504,7 +499,7 @@ export class CssAnimator {
504499
if (evAnimEnd.target !== element) {
505500
return;
506501
}
507-
502+
508503
// Step 2.1.0: Stop event propagation, bubbling will otherwise prevent parent animation
509504
evAnimEnd.stopPropagation();
510505

test/animator.spec.js

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -615,31 +615,41 @@ describe('animator-css', () => {
615615
});
616616

617617
it('should animate enter element using stagger-enter', (done) => {
618-
elems = $('.stagger-enter-only');
618+
let eelems = $('.stagger-enter-only');
619+
620+
setTimeout( () => {
621+
expect($(eelems[0]).css('opacity')).not.toBe('0');
622+
expect($(eelems[eelems.length - 1]).css('opacity')).toBe('0');
623+
}, 100 );
619624

620625
let proms = [];
621-
elems.each( (idx, elem) => {
622-
proms.push(sut.leave(elem));
626+
eelems.each( (idx, elem) => {
627+
proms.push(sut.enter(elem));
623628
});
624629

625630
Promise.all(proms).then( () => {
626-
elems.each( (idx, elem) => {
631+
eelems.each( (idx, elem) => {
627632
expect($(elem).css('opacity')).toBe('1');
628633
});
629634
done();
630635
});
631636
});
632637

633638
it('should animate leave element using stagger-leave', (done) => {
634-
elems = $('.stagger-leave-only');
639+
let lelems = $('.stagger-leave-only');
640+
641+
setTimeout( () => {
642+
expect($(lelems[0]).css('opacity')).not.toBe('1');
643+
expect($(lelems[lelems.length - 1]).css('opacity')).toBe('1');
644+
}, 100 );
635645

636646
let proms = [];
637-
elems.each( (idx, elem) => {
647+
lelems.each( (idx, elem) => {
638648
proms.push(sut.leave(elem));
639649
});
640650

641651
Promise.all(proms).then( () => {
642-
elems.each( (idx, elem) => {
652+
lelems.each( (idx, elem) => {
643653
expect($(elem).css('opacity')).toBe('0');
644654
});
645655
done();

test/fixtures/animation.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,11 +137,11 @@
137137
opacity: 0!important;
138138
}
139139

140-
ul.au-stagger {
141-
/* 200ms will be applied between each successive enter operation */
140+
ul.au-stagger, ul.au-stagger-leave, ul.au-stagger-enter {
142141
-webkit-animation-delay:100ms;
143142
animation-delay:100ms;
144143
}
144+
145145
</style>
146146

147147
<div id="animation">

0 commit comments

Comments
 (0)