54cf2c58adc230bde17712fbb87751710263be5a1aa65f128ea8cb358fe749d4e5c1673e50a8f1074e508b77418602fc66b46b8094807f5d585091c13866fa 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import { cAF, rAF } from '../../../../utils/raf.mjs';
  2. const useGridWheel = ({ atXEndEdge, atXStartEdge, atYEndEdge, atYStartEdge }, onWheelDelta) => {
  3. let frameHandle = null;
  4. let xOffset = 0;
  5. let yOffset = 0;
  6. const hasReachedEdge = (x, y) => {
  7. const xEdgeReached = x <= 0 && atXStartEdge.value || x >= 0 && atXEndEdge.value;
  8. const yEdgeReached = y <= 0 && atYStartEdge.value || y >= 0 && atYEndEdge.value;
  9. return xEdgeReached && yEdgeReached;
  10. };
  11. const onWheel = (e) => {
  12. cAF(frameHandle);
  13. let x = e.deltaX;
  14. let y = e.deltaY;
  15. if (Math.abs(x) > Math.abs(y)) {
  16. y = 0;
  17. } else {
  18. x = 0;
  19. }
  20. if (e.shiftKey && y !== 0) {
  21. x = y;
  22. y = 0;
  23. }
  24. if (hasReachedEdge(xOffset, yOffset) && hasReachedEdge(xOffset + x, yOffset + y))
  25. return;
  26. xOffset += x;
  27. yOffset += y;
  28. e.preventDefault();
  29. frameHandle = rAF(() => {
  30. onWheelDelta(xOffset, yOffset);
  31. xOffset = 0;
  32. yOffset = 0;
  33. });
  34. };
  35. return {
  36. hasReachedEdge,
  37. onWheel
  38. };
  39. };
  40. export { useGridWheel };
  41. //# sourceMappingURL=use-grid-wheel.mjs.map