correction.js 970 B

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