correction.ts 1.2 KB

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