UNPKG

2.58 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
5var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
7Object.defineProperty(exports, "__esModule", {
8 value: true
9});
10exports.default = useScrollTrigger;
11
12var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
14var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
15
16var React = _interopRequireWildcard(require("react"));
17
18function defaultTrigger(store, options) {
19 var _options$disableHyste = options.disableHysteresis,
20 disableHysteresis = _options$disableHyste === void 0 ? false : _options$disableHyste,
21 _options$threshold = options.threshold,
22 threshold = _options$threshold === void 0 ? 100 : _options$threshold,
23 target = options.target;
24 var previous = store.current;
25
26 if (target) {
27 // Get vertical scroll
28 store.current = target.pageYOffset !== undefined ? target.pageYOffset : target.scrollTop;
29 }
30
31 if (!disableHysteresis && previous !== undefined) {
32 if (store.current < previous) {
33 return false;
34 }
35 }
36
37 return store.current > threshold;
38}
39
40var defaultTarget = typeof window !== 'undefined' ? window : null;
41
42function useScrollTrigger() {
43 var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
44 var _options$getTrigger = options.getTrigger,
45 getTrigger = _options$getTrigger === void 0 ? defaultTrigger : _options$getTrigger,
46 _options$target = options.target,
47 target = _options$target === void 0 ? defaultTarget : _options$target,
48 other = (0, _objectWithoutProperties2.default)(options, ["getTrigger", "target"]);
49 var store = React.useRef();
50
51 var _React$useState = React.useState(function () {
52 return getTrigger(store, other);
53 }),
54 trigger = _React$useState[0],
55 setTrigger = _React$useState[1];
56
57 React.useEffect(function () {
58 var handleScroll = function handleScroll() {
59 setTrigger(getTrigger(store, (0, _extends2.default)({
60 target: target
61 }, other)));
62 };
63
64 handleScroll(); // Re-evaluate trigger when dependencies change
65
66 target.addEventListener('scroll', handleScroll);
67 return function () {
68 target.removeEventListener('scroll', handleScroll);
69 }; // See Option 3. https://github.com/facebook/react/issues/14476#issuecomment-471199055
70 // eslint-disable-next-line react-hooks/exhaustive-deps
71 }, [target, getTrigger, JSON.stringify(other)]);
72 return trigger;
73}
\No newline at end of file