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