1 | "use strict";
|
2 | 'use client';
|
3 |
|
4 | var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
5 | Object.defineProperty(exports, "__esModule", {
|
6 | value: true
|
7 | });
|
8 | exports.default = useScrollTrigger;
|
9 | var React = _interopRequireWildcard(require("react"));
|
10 | function defaultTrigger(store, options) {
|
11 | const {
|
12 | disableHysteresis = false,
|
13 | threshold = 100,
|
14 | target
|
15 | } = options;
|
16 | const previous = store.current;
|
17 | if (target) {
|
18 |
|
19 | store.current = target.pageYOffset !== undefined ? target.pageYOffset : target.scrollTop;
|
20 | }
|
21 | if (!disableHysteresis && previous !== undefined) {
|
22 | if (store.current < previous) {
|
23 | return false;
|
24 | }
|
25 | }
|
26 | return store.current > threshold;
|
27 | }
|
28 | const defaultTarget = typeof window !== 'undefined' ? window : null;
|
29 | function useScrollTrigger(options = {}) {
|
30 | const {
|
31 | getTrigger = defaultTrigger,
|
32 | target = defaultTarget,
|
33 | ...other
|
34 | } = options;
|
35 | const store = React.useRef();
|
36 | const [trigger, setTrigger] = React.useState(() => getTrigger(store, other));
|
37 | React.useEffect(() => {
|
38 | const handleScroll = () => {
|
39 | setTrigger(getTrigger(store, {
|
40 | target,
|
41 | ...other
|
42 | }));
|
43 | };
|
44 | handleScroll();
|
45 | target.addEventListener('scroll', handleScroll, {
|
46 | passive: true
|
47 | });
|
48 | return () => {
|
49 | target.removeEventListener('scroll', handleScroll, {
|
50 | passive: true
|
51 | });
|
52 | };
|
53 |
|
54 |
|
55 |
|
56 | }, [target, getTrigger, JSON.stringify(other)]);
|
57 | return trigger;
|
58 | } |
\ | No newline at end of file |