Преглед изворни кода

auto-animate works on vertically centered decks

Hakim El Hattab пре 5 година
родитељ
комит
a3cd500154
2 измењених фајлова са 18 додато и 9 уклоњено
  1. 17 8
      js/reveal.js
  2. 1 1
      test/examples/auto-animate.html

+ 17 - 8
js/reveal.js

@@ -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' );

+ 1 - 1
test/examples/auto-animate.html

@@ -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">