useOriginScroll.js 887 B

12345678910111213141516171819202122232425262728
  1. export default ((isScrollAtTop, isScrollAtBottom) => {
  2. // Do lock for a wheel when scrolling
  3. let lock = false;
  4. let lockTimeout = null;
  5. function lockScroll() {
  6. clearTimeout(lockTimeout);
  7. lock = true;
  8. lockTimeout = setTimeout(() => {
  9. lock = false;
  10. }, 50);
  11. }
  12. return function (deltaY) {
  13. let smoothOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
  14. const originScroll =
  15. // Pass origin wheel when on the top
  16. deltaY < 0 && isScrollAtTop.value ||
  17. // Pass origin wheel when on the bottom
  18. deltaY > 0 && isScrollAtBottom.value;
  19. if (smoothOffset && originScroll) {
  20. // No need lock anymore when it's smooth offset from touchMove interval
  21. clearTimeout(lockTimeout);
  22. lock = false;
  23. } else if (!originScroll || lock) {
  24. lockScroll();
  25. }
  26. return !lock && originScroll;
  27. };
  28. });