@@ -202,8 +202,6 @@ angular.module('ui.scroll', [])
202202 'display' : 'block'
203203 } ) ;
204204
205- let viewportOffset = viewport . offset ( ) ? ( ) => viewport . offset ( ) : ( ) => ( { top : 0 } ) ;
206-
207205 function Cache ( ) {
208206 const cache = Object . create ( Array . prototype ) ;
209207
@@ -295,12 +293,17 @@ angular.module('ui.scroll', [])
295293 clipBottom ( ) {
296294 // clip the invisible items off the bottom
297295 let overage = 0 ;
296+ let overageHeight = 0 ;
297+ let itemHeight = 0 ;
298+ let emptySpaceHeight = viewport . bottomDataPos ( ) - viewport . bottomVisiblePos ( ) - bufferPadding ( ) ;
298299
299300 for ( let i = buffer . length - 1 ; i >= 0 ; i -- ) {
300- if ( buffer [ i ] . element . offset ( ) . top - viewportOffset ( ) . top <= viewport . outerHeight ( ) + bufferPadding ( ) ) {
301+ itemHeight = buffer [ i ] . element . outerHeight ( true ) ;
302+ if ( overageHeight + itemHeight > emptySpaceHeight ) {
301303 break ;
302304 }
303305 bottomPadding . cache . add ( buffer [ i ] ) ;
306+ overageHeight += itemHeight ;
304307 overage ++ ;
305308 }
306309
@@ -320,13 +323,16 @@ angular.module('ui.scroll', [])
320323 // clip the invisible items off the top
321324 let overage = 0 ;
322325 let overageHeight = 0 ;
326+ let itemHeight = 0 ;
327+ let emptySpaceHeight = viewport . topVisiblePos ( ) - viewport . topDataPos ( ) - bufferPadding ( ) ;
323328
324329 for ( let i = 0 ; i < buffer . length ; i ++ ) {
325- if ( buffer [ i ] . element . offset ( ) . top - viewportOffset ( ) . top + buffer [ i ] . element . outerHeight ( true ) >= ( - 1 ) * bufferPadding ( ) ) {
330+ itemHeight = buffer [ i ] . element . outerHeight ( true ) ;
331+ if ( overageHeight + itemHeight > emptySpaceHeight ) {
326332 break ;
327333 }
328334 topPadding . cache . add ( buffer [ i ] ) ;
329- overageHeight += buffer [ i ] . element . outerHeight ( true ) ;
335+ overageHeight += itemHeight ;
330336 overage ++ ;
331337 }
332338
0 commit comments