diff options
Diffstat (limited to 'themes/twentyfifteen/js/functions.js')
-rw-r--r-- | themes/twentyfifteen/js/functions.js | 83 |
1 files changed, 19 insertions, 64 deletions
diff --git a/themes/twentyfifteen/js/functions.js b/themes/twentyfifteen/js/functions.js index b9dddc85..eaa3cac3 100644 --- a/themes/twentyfifteen/js/functions.js +++ b/themes/twentyfifteen/js/functions.js @@ -6,10 +6,8 @@ */ ( function( $ ) { - var $body, $window, $sidebar, adminbarOffset, top = false, - bottom = false, windowWidth, windowHeight, lastWindowPos = 0, - topOffset = 0, bodyHeight, sidebarHeight, resizeTimer, - secondary, button; + var $body, $window, $sidebar, resizeTimer, + secondary, button; function initMainNavigation( container ) { // Add dropdown toggle that display child menu items. @@ -19,7 +17,7 @@ container.find( '.current-menu-ancestor > button' ).addClass( 'toggle-on' ); container.find( '.current-menu-ancestor > .sub-menu' ).addClass( 'toggled-on' ); - container.find( '.dropdown-toggle' ).click( function( e ) { + container.find( '.dropdown-toggle' ).on( 'click', function( e ) { var _this = $( this ); e.preventDefault(); _this.toggleClass( 'toggle-on' ); @@ -81,6 +79,7 @@ * * 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() { @@ -96,71 +95,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(), + bodyHeight = $body.height(); + + if( 955 < $window.width() && bodyHeight > sidebarHeight && ( windowPos + windowHeight ) >= sidebarHeight ) { + $sidebar.css({ + position: 'fixed', + bottom: sidebarHeight > windowHeight ? 0 : 'auto' + }); + } else { + $sidebar.css('position', 'relative'); + } } $( document ).ready( function() { $body = $( document.body ); $window = $( window ); $sidebar = $( '#sidebar' ).first(); - adminbarOffset = $body.is( '.admin-bar' ) ? $( '#wpadminbar' ).height() : 0; $window - .on( 'scroll.twentyfifteen', scroll ) + .on( 'scroll.twentyfifteen', resizeAndScroll ) .on( 'load.twentyfifteen', onResizeARIA ) .on( 'resize.twentyfifteen', function() { clearTimeout( resizeTimer ); @@ -169,9 +126,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 ); } } ); |