use scrollHeight instead of custom measurement

This commit is contained in:
Hakim El Hattab 2016-04-27 11:12:16 +02:00
parent 539e774d31
commit 66c4e6a77f
1 changed files with 4 additions and 41 deletions

View File

@ -589,7 +589,7 @@
var left = ( pageWidth - slideWidth ) / 2, var left = ( pageWidth - slideWidth ) / 2,
top = ( pageHeight - slideHeight ) / 2; top = ( pageHeight - slideHeight ) / 2;
var contentHeight = getAbsoluteHeight( slide ); var contentHeight = slide.scrollHeight;
var numberOfPages = Math.max( Math.ceil( contentHeight / pageHeight ), 1 ); var numberOfPages = Math.max( Math.ceil( contentHeight / pageHeight ), 1 );
// Center slides vertically // Center slides vertically
@ -1290,41 +1290,6 @@
} }
/**
* Retrieves the height of the given element by looking
* at the position and height of its immediate children.
*/
function getAbsoluteHeight( element ) {
var height = 0;
if( element ) {
var absoluteChildren = 0;
toArray( element.childNodes ).forEach( function( child ) {
if( typeof child.offsetTop === 'number' && child.style ) {
// Count # of abs children
if( window.getComputedStyle( child ).position === 'absolute' ) {
absoluteChildren += 1;
}
height = Math.max( height, child.offsetTop + child.offsetHeight );
}
} );
// If there are no absolute children, use offsetHeight
if( absoluteChildren === 0 ) {
height = element.offsetHeight;
}
}
return height;
}
/** /**
* Returns the remaining height within the parent of the * Returns the remaining height within the parent of the
* target element. * target element.
@ -1589,10 +1554,8 @@
var size = getComputedSlideSize(); var size = getComputedSlideSize();
var slidePadding = 20; // TODO Dig this out of DOM
// Layout the contents of the slides // Layout the contents of the slides
layoutSlideContents( config.width, config.height, slidePadding ); layoutSlideContents( config.width, config.height );
dom.slides.style.width = size.width + 'px'; dom.slides.style.width = size.width + 'px';
dom.slides.style.height = size.height + 'px'; dom.slides.style.height = size.height + 'px';
@ -1654,7 +1617,7 @@
slide.style.top = 0; slide.style.top = 0;
} }
else { else {
slide.style.top = Math.max( ( ( size.height - getAbsoluteHeight( slide ) ) / 2 ) - slidePadding, 0 ) + 'px'; slide.style.top = Math.max( ( size.height - slide.scrollHeight ) / 2, 0 ) + 'px';
} }
} }
else { else {
@ -1674,7 +1637,7 @@
* Applies layout logic to the contents of all slides in * Applies layout logic to the contents of all slides in
* the presentation. * the presentation.
*/ */
function layoutSlideContents( width, height, padding ) { function layoutSlideContents( width, height ) {
// Handle sizing of elements with the 'stretch' class // Handle sizing of elements with the 'stretch' class
toArray( dom.slides.querySelectorAll( 'section > .stretch' ) ).forEach( function( element ) { toArray( dom.slides.querySelectorAll( 'section > .stretch' ) ).forEach( function( element ) {