123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- /**
- * 对选中的组件进行缩放
- * 如果操作的是group组件,递归缩放子元素
- *
- * @param projectStore 项目store
- * @param type 缩放类型
- * @param moveX x轴移动距离
- * @param moveY y轴移动距离
- * @param pathPrefix 路径前缀
- * @param elements 选中的组件
- * @param parentKey 父组件key
- * @returns void
- *
- */
- import { CustomElement } from "#/project";
- export const scaleAction = ({
- projectStore,
- type,
- moveX,
- moveY,
- pathPrefix = "",
- elements,
- parentKey,
- }: {
- projectStore: any;
- type: string;
- moveX: number;
- moveY: number;
- elements: CustomElement[];
- pathPrefix?: string;
- parentKey?: string;
- }) => {
- // 对选中的组件进行缩放
- elements.forEach((item, index) => {
- let { x, y, width, height } = item.container.props || {};
- switch (type) {
- case "top-left":
- width -= moveX;
- height -= moveY;
- if (!parentKey) {
- x += moveX;
- y += moveY;
- }
- break;
- case "top-center":
- height -= moveY;
- if (!parentKey) {
- y += moveY;
- }
- break;
- case "top-right":
- width += moveX;
- height -= moveY;
- if (!parentKey) {
- y += moveY;
- }
- break;
- case "left-center":
- width -= moveX;
- if (!parentKey) {
- x += moveX;
- }
- break;
- case "right-center":
- width += moveX;
- break;
- case "bottom-left":
- width -= moveX;
- height += moveY;
- if (!parentKey) {
- x += moveX;
- }
- break;
- case "bottom-center":
- height += moveY;
- break;
- case "bottom-right":
- width += moveX;
- height += moveY;
- break;
- }
- if (width < 10 || height < 10) return;
- const prefix = pathPrefix ? `${pathPrefix}[${index}].` : "";
- projectStore.updateElement(
- parentKey || item.key,
- prefix + "container.props.x",
- Math.round(x)
- );
- projectStore.updateElement(
- parentKey || item.key,
- prefix + "container.props.y",
- Math.round(y)
- );
- projectStore.updateElement(
- parentKey || item.key,
- prefix + "container.props.width",
- Math.round(width)
- );
- projectStore.updateElement(
- parentKey || item.key,
- prefix + "container.props.height",
- Math.round(height)
- );
- // 如果是group组件,递归缩放子元素
- if (item.componentType === "group") {
- scaleAction({
- projectStore,
- type,
- moveX,
- moveY,
- pathPrefix: `children`,
- elements: item.children || [],
- parentKey: item.key,
- });
- }
- });
- };
|