TopLeft
BottomLeft
TopRight
BottomRight
Scroll Me
Position
0, 0
isScrollingfalse Top Arrived
true Right Arrived
false Bottom Arrived
false Left Arrived
trueuseScroll
Reactive scroll position and state
Usage
<script setup lang="ts">
import { useScroll } from '@vueuse/core'
const el = ref<HTMLElement | null>(null)
const { x, y, isScrolling, arrivedState } = useScroll(el)
</script>
<template>
<div ref="el"></div>
</template>
// With offsets
const { x, y, isScrolling, arrivedState } = useScroll(el, {
offset: { top: 30, bottom: 30, right: 30, left: 30 },
})
Type Declarations
export interface UseScrollOptions {
/**
* Throttle time for scroll event,it’s disabled by default.
*
* @default 0
*/
throttle?: number
/**
* The check time when scrolling ends.
* This configuration will be setting to (throttle + idle) when the `throttle` is configured.
*
* @default 200
*/
idle?: number
/**
* Offset arrived states by x pixels
*
*/
offset?: {
left?: number
right?: number
top?: number
bottom?: number
}
/**
* Trigger it when scrolling.
*
*/
onScroll?: () => void
/**
* Trigger it when scrolling ends.
*
*/
onStop?: () => void
/**
* Listener options for scroll event.
*
* @default {capture: false, passive: true}
*/
eventListenerOptions?: boolean | AddEventListenerOptions
}
/**
* Reactive scroll.
*
* @see https://vueuse.org/useScroll
* @param element
* @param options
*/
export declare function useScroll(
element: MaybeRef<
HTMLElement | SVGElement | Window | Document | null | undefined
>,
options?: UseScrollOptions
): {
x: Ref<number>
y: Ref<number>
isScrolling: Ref<boolean>
arrivedState: {
left: boolean
right: boolean
top: boolean
bottom: boolean
}
}
export declare type UseScrollReturn = ReturnType<typeof useScroll>