@@ -145,74 +145,76 @@ const List = defineComponent({
145
145
watch (
146
146
[ inVirtual , useVirtual , ( ) => state . scrollTop , mergedData , heights , ( ) => props . height ] ,
147
147
( ) => {
148
- if ( ! useVirtual . value ) {
149
- calRes . value = {
150
- scrollHeight : undefined ,
151
- start : 0 ,
152
- end : mergedData . value . length - 1 ,
153
- offset : undefined ,
154
- } ;
155
- return ;
156
- }
157
-
158
- // Always use virtual scroll bar in avoid shaking
159
- if ( ! inVirtual . value ) {
160
- calRes . value = {
161
- scrollHeight : fillerInnerRef . value ?. offsetHeight || 0 ,
162
- start : 0 ,
163
- end : mergedData . value . length - 1 ,
164
- offset : undefined ,
165
- } ;
166
- return ;
167
- }
168
-
169
- let itemTop = 0 ;
170
- let startIndex : number | undefined ;
171
- let startOffset : number | undefined ;
172
- let endIndex : number | undefined ;
173
- const dataLen = mergedData . value . length ;
174
- const data = mergedData . value ;
175
- for ( let i = 0 ; i < dataLen ; i += 1 ) {
176
- const item = data [ i ] ;
177
- const key = getKey ( item ) ;
178
-
179
- const cacheHeight = heights [ key ] ;
180
- const currentItemBottom =
181
- itemTop + ( cacheHeight === undefined ? props . itemHeight ! : cacheHeight ) ;
182
-
183
- if ( currentItemBottom >= state . scrollTop && startIndex === undefined ) {
184
- startIndex = i ;
185
- startOffset = itemTop ;
148
+ nextTick ( ( ) => {
149
+ if ( ! useVirtual . value ) {
150
+ calRes . value = {
151
+ scrollHeight : undefined ,
152
+ start : 0 ,
153
+ end : mergedData . value . length - 1 ,
154
+ offset : undefined ,
155
+ } ;
156
+ return ;
186
157
}
187
158
188
- // Check item bottom in the range. We will render additional one item for motion usage
189
- if ( currentItemBottom > state . scrollTop + props . height ! && endIndex === undefined ) {
190
- endIndex = i ;
159
+ // Always use virtual scroll bar in avoid shaking
160
+ if ( ! inVirtual . value ) {
161
+ calRes . value = {
162
+ scrollHeight : fillerInnerRef . value ?. offsetHeight || 0 ,
163
+ start : 0 ,
164
+ end : mergedData . value . length - 1 ,
165
+ offset : undefined ,
166
+ } ;
167
+ return ;
191
168
}
192
169
193
- itemTop = currentItemBottom ;
194
- }
170
+ let itemTop = 0 ;
171
+ let startIndex : number | undefined ;
172
+ let startOffset : number | undefined ;
173
+ let endIndex : number | undefined ;
174
+ const dataLen = mergedData . value . length ;
175
+ const data = mergedData . value ;
176
+ for ( let i = 0 ; i < dataLen ; i += 1 ) {
177
+ const item = data [ i ] ;
178
+ const key = getKey ( item ) ;
179
+
180
+ const cacheHeight = heights [ key ] ;
181
+ const currentItemBottom =
182
+ itemTop + ( cacheHeight === undefined ? props . itemHeight ! : cacheHeight ) ;
183
+
184
+ if ( currentItemBottom >= state . scrollTop && startIndex === undefined ) {
185
+ startIndex = i ;
186
+ startOffset = itemTop ;
187
+ }
188
+
189
+ // Check item bottom in the range. We will render additional one item for motion usage
190
+ if ( currentItemBottom > state . scrollTop + props . height ! && endIndex === undefined ) {
191
+ endIndex = i ;
192
+ }
193
+
194
+ itemTop = currentItemBottom ;
195
+ }
195
196
196
- // Fallback to normal if not match. This code should never reach
197
- /* istanbul ignore next */
198
- if ( startIndex === undefined ) {
199
- startIndex = 0 ;
200
- startOffset = 0 ;
201
- }
202
- if ( endIndex === undefined ) {
203
- endIndex = dataLen - 1 ;
204
- }
197
+ // Fallback to normal if not match. This code should never reach
198
+ /* istanbul ignore next */
199
+ if ( startIndex === undefined ) {
200
+ startIndex = 0 ;
201
+ startOffset = 0 ;
202
+ }
203
+ if ( endIndex === undefined ) {
204
+ endIndex = dataLen - 1 ;
205
+ }
205
206
206
- // Give cache to improve scroll experience
207
- endIndex = Math . min ( endIndex + 1 , dataLen ) ;
208
- calRes . value = {
209
- scrollHeight : itemTop ,
210
- start : startIndex ,
211
- end : endIndex ,
212
- offset : startOffset ,
213
- } ;
207
+ // Give cache to improve scroll experience
208
+ endIndex = Math . min ( endIndex + 1 , dataLen ) ;
209
+ calRes . value = {
210
+ scrollHeight : itemTop ,
211
+ start : startIndex ,
212
+ end : endIndex ,
213
+ offset : startOffset ,
214
+ } ;
215
+ } ) ;
214
216
} ,
215
- { immediate : true } ,
217
+ { immediate : true , flush : 'post' } ,
216
218
) ;
217
219
218
220
// =============================== In Range ===============================
0 commit comments