@@ -202,8 +202,6 @@ angular.module('ui.scroll', [])
202
202
'display' : 'block'
203
203
} ) ;
204
204
205
- let viewportOffset = viewport . offset ( ) ? ( ) => viewport . offset ( ) : ( ) => ( { top : 0 } ) ;
206
-
207
205
function Cache ( ) {
208
206
const cache = Object . create ( Array . prototype ) ;
209
207
@@ -295,12 +293,17 @@ angular.module('ui.scroll', [])
295
293
clipBottom ( ) {
296
294
// clip the invisible items off the bottom
297
295
let overage = 0 ;
296
+ let overageHeight = 0 ;
297
+ let itemHeight = 0 ;
298
+ let emptySpaceHeight = viewport . bottomDataPos ( ) - viewport . bottomVisiblePos ( ) - bufferPadding ( ) ;
298
299
299
300
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 ) {
301
303
break ;
302
304
}
303
305
bottomPadding . cache . add ( buffer [ i ] ) ;
306
+ overageHeight += itemHeight ;
304
307
overage ++ ;
305
308
}
306
309
@@ -320,13 +323,16 @@ angular.module('ui.scroll', [])
320
323
// clip the invisible items off the top
321
324
let overage = 0 ;
322
325
let overageHeight = 0 ;
326
+ let itemHeight = 0 ;
327
+ let emptySpaceHeight = viewport . topVisiblePos ( ) - viewport . topDataPos ( ) - bufferPadding ( ) ;
323
328
324
329
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 ) {
326
332
break ;
327
333
}
328
334
topPadding . cache . add ( buffer [ i ] ) ;
329
- overageHeight += buffer [ i ] . element . outerHeight ( true ) ;
335
+ overageHeight += itemHeight ;
330
336
overage ++ ;
331
337
}
332
338
0 commit comments