next-scroll
Version:
Scroll postion gives you ability the manipulate scroll
3 lines (2 loc) • 2 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=n(e);exports.Link=function(e){var n=e.children,o=e.to,i=void 0===o?"":o,r=e.offset,f=void 0===r?0:r,u=e.duration,d=void 0===u?500:u,l=e.className,s=void 0===l?"":l;return"undefined"!=typeof window&&(window.onbeforeunload=function(){window.scrollTo(0,0)}),t.default.createElement("div",{onClick:function(){i&&function(){var e=document.getElementById(i);if(e){var n=e.offsetTop-f,t=window.pageYOffset,o=n-t,r=null;requestAnimationFrame((function e(n){null===r&&(r=n);var i=n-r,f=o*i/d+t;window.scroll(0,f),i<d&&requestAnimationFrame(e)}))}}()},className:s},n)},exports.componentInView=function(n){var t=n.id,o=n.offset,i=void 0===o?0:o,r=e.useState(null),f=r[0],u=r[1];return e.useEffect((function(){var e=!1;if(!e){if("undefined"!=typeof window){var n=document.getElementById(t);if(!n)return;var o=n.offsetHeight-i,r=n.getBoundingClientRect().y;u(o>r&&r>-o),window.addEventListener("scroll",(function(){var e=n.offsetHeight-i,t=n.getBoundingClientRect().y;u(e>t&&t>-e)}))}return function(){e=!0,window.removeEventListener("scroll",(function(){}))}}}),[]),f},exports.scrollPosition=function(){var n=e.useState(0),t=n[0],o=n[1],i=e.useState(0),r=i[0],f=i[1];return e.useEffect((function(){return"undefined"!=typeof window&&window.addEventListener("scroll",(function(){o(window.scrollX),f(window.scrollY)})),function(){return window.removeEventListener("scroll",(function(){}))}}),[]),{scrollX:t,scrollY:r}},exports.scrollTo=function(e){var n=e.target,t=e.duration,o=void 0===t?500:t;if("undefined"!=typeof window){var i;if("top"===n)i=document.body.offsetTop;else if("bottom"===n)i=document.body.offsetHeight;else{if(!n)return;i=n}var r=window.pageYOffset,f=i-r,u=null;requestAnimationFrame((function e(n){null===u&&(u=n);var t=n-u,i=f*t/o+r;window.scroll(0,i),t<o&&requestAnimationFrame(e)}))}};
//# sourceMappingURL=index.js.map