useFrameWheel.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = useFrameWheel;
  7. var _raf = _interopRequireDefault(require("../../_util/raf"));
  8. var _isFirefox = _interopRequireDefault(require("../utils/isFirefox"));
  9. var _useOriginScroll = _interopRequireDefault(require("./useOriginScroll"));
  10. function useFrameWheel(inVirtual, isScrollAtTop, isScrollAtBottom, onWheelDelta) {
  11. var offsetRef = 0;
  12. var nextFrame = null;
  13. // Firefox patch
  14. var wheelValue = null;
  15. var isMouseScroll = false;
  16. // Scroll status sync
  17. var originScroll = (0, _useOriginScroll.default)(isScrollAtTop, isScrollAtBottom);
  18. function onWheel(event) {
  19. if (!inVirtual.value) return;
  20. _raf.default.cancel(nextFrame);
  21. var deltaY = event.deltaY;
  22. offsetRef += deltaY;
  23. wheelValue = deltaY;
  24. // Do nothing when scroll at the edge, Skip check when is in scroll
  25. if (originScroll(deltaY)) return;
  26. // Proxy of scroll events
  27. if (!_isFirefox.default) {
  28. event.preventDefault();
  29. }
  30. nextFrame = (0, _raf.default)(function () {
  31. // Patch a multiple for Firefox to fix wheel number too small
  32. // ref: https://github.com/ant-design/ant-design/issues/26372#issuecomment-679460266
  33. var patchMultiple = isMouseScroll ? 10 : 1;
  34. onWheelDelta(offsetRef * patchMultiple);
  35. offsetRef = 0;
  36. });
  37. }
  38. // A patch for firefox
  39. function onFireFoxScroll(event) {
  40. if (!inVirtual.value) return;
  41. isMouseScroll = event.detail === wheelValue;
  42. }
  43. return [onWheel, onFireFoxScroll];
  44. }