@@ -371,6 +371,14 @@ const Navbar = {
371371 const touchSnapTimeout = 70 ;
372372 const desktopSnapTimeout = 300 ;
373373
374+ function calcScrollableDistance ( ) {
375+ console . log ( 'calcScrollableDistance' ) ;
376+ $pageEl . find ( '.page-content' ) . each ( ( pageContentEl ) => {
377+ pageContentEl . f7ScrollableDistance =
378+ pageContentEl . scrollHeight - pageContentEl . offsetHeight ;
379+ } ) ;
380+ }
381+
374382 function snapLargeNavbar ( ) {
375383 const inSearchbarExpanded = $navbarEl . hasClass ( 'with-searchbar-expandable-enabled' ) ;
376384 if ( inSearchbarExpanded ) return ;
@@ -450,7 +458,7 @@ const Navbar = {
450458
451459 let previousCollapseProgress = null ;
452460 let collapseProgress = null ;
453- function handleLargeNavbarCollapse ( ) {
461+ function handleLargeNavbarCollapse ( pageContentEl ) {
454462 const isHidden =
455463 $navbarEl . hasClass ( 'navbar-hidden' ) ||
456464 $navbarEl . parent ( '.navbars' ) . hasClass ( 'navbar-hidden' ) ;
@@ -459,7 +467,11 @@ const Navbar = {
459467 $navbarEl . hasClass ( 'navbar-large-transparent' ) ||
460468 ( $navbarEl . hasClass ( 'navbar-large' ) && $navbarEl . hasClass ( 'navbar-transparent' ) ) ;
461469 previousCollapseProgress = collapseProgress ;
462- collapseProgress = Math . min ( Math . max ( currentScrollTop / navbarTitleLargeHeight , 0 ) , 1 ) ;
470+ const scrollableDistance = Math . min (
471+ navbarTitleLargeHeight ,
472+ pageContentEl . f7ScrollableDistance || navbarTitleLargeHeight ,
473+ ) ;
474+ collapseProgress = Math . min ( Math . max ( currentScrollTop / scrollableDistance , 0 ) , 1 ) ;
463475 const previousCollapseWasInMiddle =
464476 previousCollapseProgress > 0 && previousCollapseProgress < 1 ;
465477 const inSearchbarExpanded = $navbarEl . hasClass ( 'with-searchbar-expandable-enabled' ) ;
@@ -569,7 +581,7 @@ const Navbar = {
569581 currentScrollTop = scrollContent . scrollTop ;
570582 scrollChanged = currentScrollTop ;
571583 if ( needCollapse ) {
572- handleLargeNavbarCollapse ( ) ;
584+ handleLargeNavbarCollapse ( scrollContent ) ;
573585 } else if ( needTransparent ) {
574586 handleNavbarTransparent ( ) ;
575587 }
@@ -597,6 +609,7 @@ const Navbar = {
597609 } , touchSnapTimeout ) ;
598610 }
599611 $pageEl . on ( 'scroll' , '.page-content' , handleScroll , true ) ;
612+
600613 if (
601614 support . touch &&
602615 ( ( needCollapse && snapPageScrollToLargeTitle ) ||
@@ -605,16 +618,15 @@ const Navbar = {
605618 app . on ( 'touchstart:passive' , handeTouchStart ) ;
606619 app . on ( 'touchend:passive' , handleTouchEnd ) ;
607620 }
608- if ( needCollapse ) {
609- $pageEl . find ( '.page-content' ) . each ( ( pageContentEl ) => {
610- if ( pageContentEl . scrollTop > 0 ) handleScroll . call ( pageContentEl ) ;
611- } ) ;
612- } else if ( needTransparent ) {
621+ calcScrollableDistance ( ) ;
622+ if ( needCollapse || needTransparent ) {
613623 $pageEl . find ( '.page-content' ) . each ( ( pageContentEl ) => {
614624 if ( pageContentEl . scrollTop > 0 ) handleScroll . call ( pageContentEl ) ;
615625 } ) ;
616626 }
627+ app . on ( 'resize' , calcScrollableDistance ) ;
617628 $pageEl [ 0 ] . f7DetachNavbarScrollHandlers = function f7DetachNavbarScrollHandlers ( ) {
629+ app . off ( 'resize' , calcScrollableDistance ) ;
618630 delete $pageEl [ 0 ] . f7DetachNavbarScrollHandlers ;
619631 $pageEl . off ( 'scroll' , '.page-content' , handleScroll , true ) ;
620632 if (
0 commit comments