diff --git a/themes/twentyfifteen/js/functions.js b/themes/twentyfifteen/js/functions.js index 756fbe4..be6515f 100644 --- a/themes/twentyfifteen/js/functions.js +++ b/themes/twentyfifteen/js/functions.js @@ -77,9 +77,11 @@ } )(); /** - * @summary Add or remove ARIA attributes. + * Add or remove ARIA attributes. + * * Uses jQuery's width() function to determine the size of the window and add * the default ARIA attributes for the menu toggle if it's visible. + * * @since Twenty Fifteen 1.1 */ function onResizeARIA() { @@ -95,71 +97,29 @@ } // Sidebar scrolling. - function resize() { - windowWidth = $window.width(); - - if ( 955 > windowWidth ) { - top = bottom = false; - $sidebar.removeAttr( 'style' ); - } - } - - function scroll() { - var windowPos = $window.scrollTop(); - - if ( 955 > windowWidth ) { - return; - } - - sidebarHeight = $sidebar.height(); - windowHeight = $window.height(); - bodyHeight = $body.height(); - - if ( sidebarHeight + adminbarOffset > windowHeight ) { - if ( windowPos > lastWindowPos ) { - if ( top ) { - top = false; - topOffset = ( $sidebar.offset().top > 0 ) ? $sidebar.offset().top - adminbarOffset : 0; - $sidebar.attr( 'style', 'top: ' + topOffset + 'px;' ); - } else if ( ! bottom && windowPos + windowHeight > sidebarHeight + $sidebar.offset().top && sidebarHeight + adminbarOffset < bodyHeight ) { - bottom = true; - $sidebar.attr( 'style', 'position: fixed; bottom: 0;' ); - } - } else if ( windowPos < lastWindowPos ) { - if ( bottom ) { - bottom = false; - topOffset = ( $sidebar.offset().top > 0 ) ? $sidebar.offset().top - adminbarOffset : 0; - $sidebar.attr( 'style', 'top: ' + topOffset + 'px;' ); - } else if ( ! top && windowPos + adminbarOffset < $sidebar.offset().top ) { - top = true; - $sidebar.attr( 'style', 'position: fixed;' ); - } - } else { - top = bottom = false; - topOffset = ( $sidebar.offset().top > 0 ) ? $sidebar.offset().top - adminbarOffset : 0; - $sidebar.attr( 'style', 'top: ' + topOffset + 'px;' ); - } - } else if ( ! top ) { - top = true; - $sidebar.attr( 'style', 'position: fixed;' ); - } - - lastWindowPos = windowPos; - } - function resizeAndScroll() { - resize(); - scroll(); + var windowPos = $window.scrollTop(), + windowHeight = $window.height(), + sidebarHeight = $sidebar.height(), + pageHeight = $( '#page' ).height(); + + if ( 955 < $window.width() && pageHeight > sidebarHeight && ( windowPos + windowHeight ) >= sidebarHeight ) { + $sidebar.css({ + position: 'fixed', + bottom: sidebarHeight > windowHeight ? 0 : 'auto' + }); + } else { + $sidebar.css('position', 'relative'); + } } - $( document ).ready( function() { + $( function() { $body = $( document.body ); $window = $( window ); $sidebar = $( '#sidebar' ).first(); - adminbarOffset = $( '#toolbar' ).height(); $window - .on( 'scroll.twentyfifteen', scroll ) + .on( 'scroll.twentyfifteen', resizeAndScroll ) .on( 'load.twentyfifteen', onResizeARIA ) .on( 'resize.twentyfifteen', function() { clearTimeout( resizeTimer ); @@ -168,9 +128,7 @@ } ); $sidebar.on( 'click.twentyfifteen keydown.twentyfifteen', 'button', resizeAndScroll ); - resizeAndScroll(); - - for ( var i = 1; i < 6; i++ ) { + for ( var i = 0; i < 6; i++ ) { setTimeout( resizeAndScroll, 100 * i ); } } ); diff --git a/themes/twentyfifteen/layout.html.php b/themes/twentyfifteen/layout.html.php index c0603b3..6cecdb5 100644 --- a/themes/twentyfifteen/layout.html.php +++ b/themes/twentyfifteen/layout.html.php @@ -21,7 +21,7 @@
-