correction.js 1004 B

12345678910111213141516171819202122232425262728293031
  1. import { collision, layoutCheck } from "./collison";
  2. export const checkInContainer = (GridX, GridY, col, w) => {
  3. /**防止元素出container */
  4. if (GridX + w > col - 1)
  5. GridX = col - w; //右边界
  6. if (GridX < 0)
  7. GridX = 0; //左边界
  8. if (GridY < 0)
  9. GridY = 0; //上边界
  10. return { GridX, GridY };
  11. };
  12. /**
  13. * 这个函数会有副作用,不是纯函数,会改变item的Gridx和GridY
  14. * @param {*} item
  15. */
  16. export const correctItem = (item, col) => {
  17. const { GridX, GridY } = checkInContainer(item.GridX, item.GridY, col, item.w);
  18. item.GridX = GridX;
  19. item.GridY = GridY;
  20. };
  21. export const correctLayout = (layout, col) => {
  22. var copy = [...layout];
  23. for (let i = 0; i < layout.length - 1; i++) {
  24. correctItem(copy[i], col);
  25. correctItem(copy[i + 1], col);
  26. if (collision(copy[i], copy[i + 1])) {
  27. copy = layoutCheck(copy, copy[i], copy[i].UniqueKey, copy[i].UniqueKey, 0);
  28. }
  29. }
  30. return copy;
  31. };