MCPcopy Create free account
hub / github.com/TanStack/virtual / observeWindowOffset

Function observeWindowOffset

packages/virtual-core/src/index.ts:192–238  ·  view source on GitHub ↗
(
  instance: Virtualizer<Window, any>,
  cb: ObserveOffsetCallBack,
)

Source from the content-addressed store, hash-verified

190}
191
192export const observeWindowOffset = (
193 instance: Virtualizer<Window, any>,
194 cb: ObserveOffsetCallBack,
195) => {
196 const element = instance.scrollElement
197 if (!element) {
198 return
199 }
200 const targetWindow = instance.targetWindow
201 if (!targetWindow) {
202 return
203 }
204
205 let offset = 0
206 const fallback =
207 instance.options.useScrollendEvent && supportsScrollend
208 ? () => undefined
209 : debounce(
210 targetWindow,
211 () => {
212 cb(offset, false)
213 },
214 instance.options.isScrollingResetDelay,
215 )
216
217 const createHandler = (isScrolling: boolean) => () => {
218 offset = element[instance.options.horizontal ? 'scrollX' : 'scrollY']
219 fallback()
220 cb(offset, isScrolling)
221 }
222 const handler = createHandler(true)
223 const endHandler = createHandler(false)
224 endHandler()
225
226 element.addEventListener('scroll', handler, addEventListenerOptions)
227 const registerScrollendEvent =
228 instance.options.useScrollendEvent && supportsScrollend
229 if (registerScrollendEvent) {
230 element.addEventListener('scrollend', endHandler, addEventListenerOptions)
231 }
232 return () => {
233 element.removeEventListener('scroll', handler)
234 if (registerScrollendEvent) {
235 element.removeEventListener('scrollend', endHandler)
236 }
237 }
238}
239
240export const measureElement = <TItemElement extends Element>(
241 element: TItemElement,

Callers

nothing calls this directly

Calls 2

debounceFunction · 0.90
createHandlerFunction · 0.85

Tested by

no test coverage detected