cleaner approach to applying transforms to slides container
This commit is contained in:
		
							
								
								
									
										51
									
								
								js/reveal.js
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								js/reveal.js
									
									
									
									
									
								
							| @@ -168,9 +168,9 @@ | ||||
| 		// The current scale of the presentation (see width/height config) | ||||
| 		scale = 1, | ||||
|  | ||||
| 		// The transform that is currently applied to the slides container | ||||
| 		slidesTransform = '', | ||||
| 		layoutTransform = '', | ||||
| 		// CSS transform that is currently applied to the slides container, | ||||
| 		// split into two groups | ||||
| 		slidesTransform = { layout: '', overview: '' }, | ||||
|  | ||||
| 		// Cached references to DOM elements | ||||
| 		dom = {}, | ||||
| @@ -301,7 +301,7 @@ | ||||
| 		features.touch = !!( 'ontouchstart' in window ); | ||||
|  | ||||
| 		// Transitions in the overview are disabled in desktop and | ||||
| 		// mobile Safari since they lag terribly | ||||
| 		// mobile Safari due to lag | ||||
| 		features.overviewTransitions = !/Version\/[\d\.]+.*Safari/.test( navigator.userAgent ); | ||||
|  | ||||
| 		isMobileDevice = /(iphone|ipod|ipad|android)/gi.test( navigator.userAgent ); | ||||
| @@ -1066,9 +1066,25 @@ | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	function transformSlides() { | ||||
| 	/** | ||||
| 	 * Applies CSS transforms to the slides container. The container | ||||
| 	 * is transformed from two separate sources: layout and the overview | ||||
| 	 * mode. | ||||
| 	 */ | ||||
| 	function transformSlides( transforms ) { | ||||
|  | ||||
| 		// Pick up new transforms from arguments | ||||
| 		if( transforms.layout ) slidesTransform.layout = transforms.layout; | ||||
| 		if( transforms.overview ) slidesTransform.overview = transforms.overview; | ||||
|  | ||||
| 		// Apply the transforms to the slides container | ||||
| 		if( slidesTransform.layout ) { | ||||
| 			transformElement( dom.slides, slidesTransform.layout + ' ' + slidesTransform.overview ); | ||||
| 		} | ||||
| 		else { | ||||
| 			transformElement( dom.slides, slidesTransform.overview ); | ||||
| 		} | ||||
|  | ||||
| 		transformElement( dom.slides, layoutTransform ? layoutTransform + ' ' + slidesTransform : slidesTransform ); | ||||
|  | ||||
| 	} | ||||
|  | ||||
| @@ -1481,12 +1497,13 @@ | ||||
| 				dom.slides.style.top = ''; | ||||
| 				dom.slides.style.bottom = ''; | ||||
| 				dom.slides.style.right = ''; | ||||
| 				layoutTransform = ''; | ||||
| 				transformSlides( { layout: '' } ); | ||||
| 			} | ||||
| 			else { | ||||
| 				// Prefer zooming in desktop Chrome so that content remains crisp | ||||
| 				if( !isMobileDevice && /chrome/i.test( navigator.userAgent ) && typeof dom.slides.style.zoom !== 'undefined' ) { | ||||
| 					dom.slides.style.zoom = scale; | ||||
| 					transformSlides( { layout: '' } ); | ||||
| 				} | ||||
| 				// Apply scale transform as a fallback | ||||
| 				else { | ||||
| @@ -1494,12 +1511,10 @@ | ||||
| 					dom.slides.style.top = '50%'; | ||||
| 					dom.slides.style.bottom = 'auto'; | ||||
| 					dom.slides.style.right = 'auto'; | ||||
| 					layoutTransform = 'translate(-50%, -50%) scale('+ scale +')'; | ||||
| 					transformSlides( { layout: 'translate(-50%, -50%) scale('+ scale +')' } ); | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			transformSlides(); | ||||
|  | ||||
| 			// Select all slides, vertical and horizontal | ||||
| 			var slides = toArray( dom.wrapper.querySelectorAll( SLIDES_SELECTOR ) ); | ||||
|  | ||||
| @@ -1746,13 +1761,13 @@ | ||||
| 			slideWidth = -slideWidth; | ||||
| 		} | ||||
|  | ||||
| 		slidesTransform = [ | ||||
| 			'translateX('+ ( -indexh * slideWidth ) +'px)', | ||||
| 			'translateY('+ ( -indexv * slideHeight ) +'px)', | ||||
| 			'translateZ('+ ( window.innerWidth < 400 ? -1000 : -2500 ) +'px)' | ||||
| 		].join( ' ' ); | ||||
|  | ||||
| 		transformSlides(); | ||||
| 		transformSlides( { | ||||
| 			overview: [ | ||||
| 				'translateX('+ ( -indexh * slideWidth ) +'px)', | ||||
| 				'translateY('+ ( -indexv * slideHeight ) +'px)', | ||||
| 				'translateZ('+ ( window.innerWidth < 400 ? -1000 : -2500 ) +'px)' | ||||
| 			].join( ' ' ) | ||||
| 		} ); | ||||
|  | ||||
| 	} | ||||
|  | ||||
| @@ -1765,7 +1780,7 @@ | ||||
| 		// Only proceed if enabled in config | ||||
| 		if( config.overview ) { | ||||
|  | ||||
| 			slidesTransform = ''; | ||||
| 			transformSlides( { overview: '' } ); | ||||
|  | ||||
| 			overview = false; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user