auto-animate works on vertically centered decks

This commit is contained in:
Hakim El Hattab 2020-01-31 11:51:31 +01:00
parent 8d89db32f6
commit a3cd500154
2 changed files with 18 additions and 9 deletions

View file

@ -3789,16 +3789,21 @@
if( config.autoAnimate ) {
var prevTargets = {};
// If our slides are centered vertically, we need to
// account for their difference in position when
// calculating deltas for animated elements
var offsetY = config.center ? fromSlide.offsetTop - toSlide.offsetTop : 0;
toArray( fromSlide.querySelectorAll( '[data-id]' ) ).forEach( function( element ) {
prevTargets[ element.getAttribute( 'data-id' ) ] = element;
var fromTargets = {};
toArray( fromSlide.querySelectorAll( '[data-id]' ) ).forEach( function( fromElement ) {
fromTargets[ fromElement.getAttribute( 'data-id' ) ] = fromElement;
} );
toArray( toSlide.querySelectorAll( '[data-id]' ) ).forEach( function( element ) {
var previousElement = prevTargets[ element.getAttribute( 'data-id' ) ];
if( previousElement ) {
autoAnimateElement( previousElement, element );
toArray( toSlide.querySelectorAll( '[data-id]' ) ).forEach( function( toElement ) {
var fromElement = fromTargets[ toElement.getAttribute( 'data-id' ) ];
if( fromElement ) {
autoAnimateElement( fromElement, toElement, offsetY );
}
} );
@ -3813,7 +3818,7 @@
* @param {HTMLElement} from
* @param {HTMLElement} to
*/
function autoAnimateElement( from, to ) {
function autoAnimateElement( from, to, offsetY ) {
var fromProps = getAutoAnimatableProperties( from ),
toProps = getAutoAnimatableProperties( to );
@ -3825,6 +3830,10 @@
scaleY: fromProps.height / toProps.height
};
// Correction applied to account for varying vertical
// positions in decks with vertical centering
if( typeof offsetY === 'number' ) delta.y += offsetY;
to.style.transition = 'none';
to.style.transform = 'translate('+delta.x+'px, '+delta.y+'px) scale('+delta.scaleX+','+delta.scaleY+')';
to.classList.add( 'auto-animate-target' );

View file

@ -22,7 +22,7 @@
<h3 data-id="opacity-test">Opacity 1.0</h2>
</section>
<section data-auto-animate>
<h3 data-id="opacity-test" style="opacity: 0.2;">Opacity 0.2</h2>
<h3 data-id="opacity-test" style="opacity: 0.2; margin-top: 200px;">Opacity 0.2</h2>
</section>
<section data-auto-animate style="height: 600px">