@@ -340,6 +340,24 @@ class Messages extends Framework7Class {
340340 return m . addMessages ( [ messageToAdd ] , animate , method ) ;
341341 }
342342
343+ setScrollData ( ) {
344+ const m = this ;
345+ // Define scroll positions before new messages added
346+ const scrollHeightBefore = m . pageContentEl . scrollHeight ;
347+ const heightBefore = m . pageContentEl . offsetHeight ;
348+ const scrollBefore = m . pageContentEl . scrollTop ;
349+ m . scrollData = {
350+ scrollHeightBefore,
351+ heightBefore,
352+ scrollBefore,
353+ } ;
354+ return {
355+ scrollHeightBefore,
356+ heightBefore,
357+ scrollBefore,
358+ } ;
359+ }
360+
343361 addMessages ( ...args ) {
344362 const m = this ;
345363 let messagesToAdd ;
@@ -357,10 +375,7 @@ class Messages extends Framework7Class {
357375 method = m . params . newMessagesFirst ? 'prepend' : 'append' ;
358376 }
359377
360- // Define scroll positions before new messages added
361- const scrollHeightBefore = m . pageContentEl . scrollHeight ;
362- const heightBefore = m . pageContentEl . offsetHeight ;
363- const scrollBefore = m . pageContentEl . scrollTop ;
378+ const { scrollHeightBefore, scrollBefore } = m . setScrollData ( ) ;
364379
365380 // Add message to DOM and data
366381 let messagesHTML = '' ;
@@ -409,21 +424,7 @@ class Messages extends Framework7Class {
409424 ( ( method === 'append' && ! m . params . newMessagesFirst ) ||
410425 ( method === 'prepend' && m . params . newMessagesFirst && ! typingMessage ) )
411426 ) {
412- if ( m . params . scrollMessagesOnEdge ) {
413- let onEdge = false ;
414- if ( m . params . newMessagesFirst && scrollBefore === 0 ) {
415- onEdge = true ;
416- }
417- if (
418- ! m . params . newMessagesFirst &&
419- scrollBefore - ( scrollHeightBefore - heightBefore ) >= - 10
420- ) {
421- onEdge = true ;
422- }
423- if ( onEdge ) m . scroll ( animate ? undefined : 0 ) ;
424- } else {
425- m . scroll ( animate ? undefined : 0 ) ;
426- }
427+ m . scrollWithEdgeCheck ( animate ) ;
427428 }
428429
429430 return m ;
@@ -469,6 +470,23 @@ class Messages extends Framework7Class {
469470 return m ;
470471 }
471472
473+ scrollWithEdgeCheck ( animate ) {
474+ const m = this ;
475+ const { scrollBefore, scrollHeightBefore, heightBefore } = m . scrollData ;
476+ if ( m . params . scrollMessagesOnEdge ) {
477+ let onEdge = false ;
478+ if ( m . params . newMessagesFirst && scrollBefore === 0 ) {
479+ onEdge = true ;
480+ }
481+ if ( ! m . params . newMessagesFirst && scrollBefore - ( scrollHeightBefore - heightBefore ) >= - 10 ) {
482+ onEdge = true ;
483+ }
484+ if ( onEdge ) m . scroll ( animate ? undefined : 0 ) ;
485+ } else {
486+ m . scroll ( animate ? undefined : 0 ) ;
487+ }
488+ }
489+
472490 scroll ( duration = 300 , scrollTop ) {
473491 const m = this ;
474492 const currentScroll = m . pageContentEl . scrollTop ;
0 commit comments