correction.js 1.0 KB

12345678910111213141516171819202122232425262728293031
  1. import { collision, layoutCheck } from "./collison";
  2. export var checkInContainer = function (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: GridX, GridY: GridY };
  11. };
  12. /**
  13. * 这个函数会有副作用,不是纯函数,会改变item的Gridx和GridY
  14. * @param {*} item
  15. */
  16. export var correctItem = function (item, col) {
  17. var _a = checkInContainer(item.GridX, item.GridY, col, item.w), GridX = _a.GridX, GridY = _a.GridY;
  18. item.GridX = GridX;
  19. item.GridY = GridY;
  20. };
  21. export var correctLayout = function (layout, col) {
  22. var copy = layout.slice();
  23. for (var 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. };