11import {
2+ Virtualizer ,
23 VirtualizerOptions ,
34 elementScroll ,
45 useVirtualizer ,
@@ -29,6 +30,18 @@ const determineScale = (parentElement: HTMLElement, width: number): number => {
2930 return scaleWidth ;
3031} ;
3132
33+ const getOffsetForIndexEager = (
34+ index : number ,
35+ virtualizer : Virtualizer < any , any > ,
36+ estimateSize : ( i : number ) => number ,
37+ ) => {
38+ let offset = virtualizer . options . paddingStart ;
39+ for ( let i = 0 ; i < index ; i ++ ) {
40+ offset += estimateSize ( i ) + virtualizer . options . gap ;
41+ }
42+ return offset ;
43+ } ;
44+
3245export interface ZoomState {
3346 currentScale : number | null ;
3447 nextScale : number | null ;
@@ -309,10 +322,12 @@ const Reader = ({
309322 onViewportsMeasured && onViewportsMeasured ( ) ;
310323
311324 if ( scrollAnchor ) {
312- const startOffset = virtualizer . getOffsetForIndex (
325+ // manually calculate offset here in case it was cached from an earlier render
326+ const startOffset = getOffsetForIndexEager (
313327 scrollAnchor . index ,
314- "start" ,
315- ) ?. [ 0 ] ;
328+ virtualizer ,
329+ estimateSize ,
330+ ) ;
316331
317332 if ( startOffset != null ) {
318333 const itemHeight = estimateSize ( scrollAnchor . index ) ;
@@ -439,6 +454,7 @@ const Reader = ({
439454 { ...reactPDFDocumentProps }
440455 file = { file }
441456 onLoadSuccess = { onDocumentLoadSuccess }
457+ scale = { scale }
442458 >
443459 < div
444460 id = "pages-container"
@@ -457,7 +473,6 @@ const Reader = ({
457473 key = { virtualItem . key }
458474 virtualItem = { virtualItem }
459475 viewports = { viewports }
460- scale = { scale }
461476 rotationAdjustment = { getRotationAdjustment ( virtualItem . index ) }
462477 rotation = { rotation + getRotationAdjustment ( virtualItem . index ) }
463478 pageObserver = { pageObserver }
0 commit comments