画布增加图层翻转
This commit is contained in:
@@ -56,11 +56,11 @@
|
|||||||
disabled
|
disabled
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="btn" @click="clickflipHorizontal">
|
<div class="btn" @click="clickflipHorizontal(v)">
|
||||||
<i class="iconfont icon-flip-horizontal"></i>
|
<i class="iconfont icon-flip-horizontal"></i>
|
||||||
<p class="tip">水平翻转</p>
|
<p class="tip">水平翻转</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="btn" @click="clickflipVertical">
|
<div class="btn" @click="clickflipVertical(v)">
|
||||||
<i class="iconfont icon-flip-vertical"></i>
|
<i class="iconfont icon-flip-vertical"></i>
|
||||||
<p class="tip">垂直翻转</p>
|
<p class="tip">垂直翻转</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -73,10 +73,12 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
import showViewVideo from "@/tool/mount";
|
||||||
import { ref, onMounted, watch, onUnmounted } from "vue";
|
import { ref, onMounted, watch, onUnmounted } from "vue";
|
||||||
import { useI18n } from "vue-i18n";
|
import { useI18n } from "vue-i18n";
|
||||||
import { ToolCommand } from "../commands/ToolCommands";
|
import { ToolCommand } from "../commands/ToolCommands";
|
||||||
import { OperationType } from "../utils/layerHelper";
|
import { OperationType } from "../utils/layerHelper";
|
||||||
|
import { TransformCommand } from "../commands/StateCommands";
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
canvas: {
|
canvas: {
|
||||||
type: Object,
|
type: Object,
|
||||||
@@ -155,20 +157,95 @@
|
|||||||
const activeObjects = ref([]);
|
const activeObjects = ref([]);
|
||||||
const getActiveObject = (e) => {
|
const getActiveObject = (e) => {
|
||||||
console.log("==========切换激活对象", e);
|
console.log("==========切换激活对象", e);
|
||||||
activeObjects.value = e.selected.map((v) => v.toObject());
|
activeObjects.value = e.selected.map((v) => v);
|
||||||
if (activeObjects.value.length === 0) {
|
if (activeObjects.value.length === 0) {
|
||||||
close();
|
close();
|
||||||
} else {
|
} else {
|
||||||
show(false);
|
show(false);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
const clickflipHorizontal = () => {
|
const lastSelectLayerId = inject("lastSelectLayerId");
|
||||||
console.log("水平翻转");
|
const layers = inject("layers");
|
||||||
};
|
const changeAngle = (activeObj) => {
|
||||||
const clickflipVertical = () => {
|
// console.log("=====================", e.target.value);
|
||||||
console.log("垂直翻转");
|
// const finalState = TransformCommand.captureTransformState(activeObj);
|
||||||
|
// const { xPrime, yPrime } = compute(
|
||||||
|
// activeObj.left,
|
||||||
|
// activeObj.top,
|
||||||
|
// activeObj.width,
|
||||||
|
// activeObj.height,
|
||||||
|
// activeObj.angle
|
||||||
|
// );
|
||||||
|
// finalState.left = xPrime;
|
||||||
|
// finalState.top = yPrime;
|
||||||
|
// const transformCmd = new TransformCommand({
|
||||||
|
// canvas: props.canvas,
|
||||||
|
// objectId: activeObj.id,
|
||||||
|
// initialState: null,
|
||||||
|
// finalState,
|
||||||
|
// objectType: activeObj.type,
|
||||||
|
// name: `变换 ${activeObj.type || "对象"}`,
|
||||||
|
// layerManager: props.layerManager,
|
||||||
|
// layers: layers,
|
||||||
|
// lastSelectLayerId: lastSelectLayerId,
|
||||||
|
// });
|
||||||
|
// props.layerManager.commandManager.execute(transformCmd, {
|
||||||
|
// name: "对象修改",
|
||||||
|
// });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const flipObject = (activeObj, type) => {
|
||||||
|
const initialState = TransformCommand.captureTransformState(activeObj);
|
||||||
|
const finalState = { ...initialState };
|
||||||
|
if (type === "h") {
|
||||||
|
finalState.flipX = !finalState.flipX;
|
||||||
|
} else if (type === "v") {
|
||||||
|
finalState.flipY = !finalState.flipY;
|
||||||
|
}
|
||||||
|
const transformCmd = new TransformCommand({
|
||||||
|
canvas: props.canvas,
|
||||||
|
objectId: activeObj.id,
|
||||||
|
initialState: initialState,
|
||||||
|
finalState,
|
||||||
|
objectType: activeObj.type,
|
||||||
|
name: `变换 ${activeObj.type || "对象"}`,
|
||||||
|
layerManager: props.layerManager,
|
||||||
|
layers: layers,
|
||||||
|
lastSelectLayerId: lastSelectLayerId,
|
||||||
|
});
|
||||||
|
props.layerManager.commandManager.execute(transformCmd, {
|
||||||
|
name: "对象修改",
|
||||||
|
});
|
||||||
|
};
|
||||||
|
const clickflipHorizontal = (obj) => {
|
||||||
|
console.log("水平翻转");
|
||||||
|
flipObject(obj, "h");
|
||||||
|
};
|
||||||
|
const clickflipVertical = (obj) => {
|
||||||
|
console.log("垂直翻转");
|
||||||
|
flipObject(obj, "v");
|
||||||
|
};
|
||||||
|
|
||||||
|
const updateActiveObjects = (arrs, keys) => {
|
||||||
|
arrs.forEach((v) => {
|
||||||
|
activeObjects.value.forEach((item) => {
|
||||||
|
if (item.id === v.id) {
|
||||||
|
keys.forEach((key) => (item[key] = v[key]));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
activeObjects.value = [...activeObjects.value];
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const objectRotatingChange = (e) => {
|
||||||
|
const arrs = [];
|
||||||
|
if (e.target._objects) {
|
||||||
|
e.target._objects.forEach((v) => arrs.push(v));
|
||||||
|
} else {
|
||||||
|
arrs.push(e.target);
|
||||||
|
}
|
||||||
|
updateActiveObjects(arrs, ["angle"]);
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置画布事件监听
|
* 设置画布事件监听
|
||||||
@@ -179,7 +256,7 @@
|
|||||||
props.canvas.on("selection:created", getActiveObject);
|
props.canvas.on("selection:created", getActiveObject);
|
||||||
props.canvas.on("selection:updated", getActiveObject);
|
props.canvas.on("selection:updated", getActiveObject);
|
||||||
// props.canvas.on("selection:cleared", () => console.log("selection:cleared"));
|
// props.canvas.on("selection:cleared", () => console.log("selection:cleared"));
|
||||||
props.canvas.on("selection:cleared", close);
|
props.canvas.on("object:rotating", objectRotatingChange);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -192,6 +269,7 @@
|
|||||||
props.canvas.off("selection:created", getActiveObject);
|
props.canvas.off("selection:created", getActiveObject);
|
||||||
props.canvas.off("selection:updated", getActiveObject);
|
props.canvas.off("selection:updated", getActiveObject);
|
||||||
// props.canvas.off("selection:cleared");
|
// props.canvas.off("selection:cleared");
|
||||||
|
props.canvas.off("object:rotating", objectRotatingChange);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
31
src/component/Canvas/CanvasEditor/fabric-canvas-events.md
Normal file
31
src/component/Canvas/CanvasEditor/fabric-canvas-events.md
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
### 鼠标事件
|
||||||
|
|
||||||
|
- `mouse:down`:鼠标按下时触发
|
||||||
|
- `mouse:up`:鼠标释放时触发
|
||||||
|
- `mouse:move`:鼠标移动时触发
|
||||||
|
- `mouse:over`:鼠标移入画布时触发
|
||||||
|
- `mouse:out`:鼠标移出画布时触发
|
||||||
|
|
||||||
|
### 对象交互事件
|
||||||
|
|
||||||
|
- `object:selected`:对象被选中时触发
|
||||||
|
- `object:modified`:对象属性(如位置、大小)修改后触发
|
||||||
|
- `object:rotating`:对象旋转过程中触发
|
||||||
|
- `object:scaling`:对象缩放过程中触发
|
||||||
|
- `object:skewing`:对象倾斜过程中触发
|
||||||
|
|
||||||
|
### 画布操作事件
|
||||||
|
|
||||||
|
- `before:render`:画布即将重绘前触发
|
||||||
|
- `after:render`:画布重绘完成后触发
|
||||||
|
- `selection:created`:选中对象集合创建时触发
|
||||||
|
- `selection:updated`:选中对象集合更新时触发
|
||||||
|
- `selection:cleared`:选中对象集合清除时触发
|
||||||
|
|
||||||
|
### 其他事件
|
||||||
|
|
||||||
|
- `object:added`:对象添加到画布时触发
|
||||||
|
- `object:removed`:对象从画布移除时触发
|
||||||
|
- `object:rotated`:对象旋转完成时触发
|
||||||
|
- `object:scaled`:对象缩放完成时触发
|
||||||
|
- `object:skewed`:对象倾斜完成时触发
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
1. 初始化事件
|
|
||||||
object:added:当新对象被添加到画布上时触发。
|
|
||||||
object:removed:当对象从画布上移除时触发。
|
|
||||||
selection:created:当选择对象时触发。
|
|
||||||
selection:updated:当选择的对象被更新时触发。
|
|
||||||
selection:cleared:当所有对象都被取消选择时触发。
|
|
||||||
|
|
||||||
2. 鼠标事件
|
|
||||||
mouse:down:鼠标按下时触发。
|
|
||||||
mouse:move:鼠标移动时触发。
|
|
||||||
mouse:up:鼠标释放时触发。
|
|
||||||
mouse:over:鼠标移到画布上时触发。
|
|
||||||
mouse:out:鼠标移出画布时触发。
|
|
||||||
mouse:wheel:鼠标滚轮滚动时触发。
|
|
||||||
|
|
||||||
3. 触摸事件(在触摸屏设备上)
|
|
||||||
touch:start:触摸开始时触发。
|
|
||||||
touch:move:触摸移动时触发。
|
|
||||||
touch:end:触摸结束时触发。
|
|
||||||
|
|
||||||
4. 键盘事件
|
|
||||||
key:down:键盘按键按下时触发。
|
|
||||||
key:up:键盘按键释放时触发。
|
|
||||||
@@ -1185,7 +1185,7 @@ defineExpose({
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- 选择工具菜单组件 -->
|
<!-- 选择工具菜单组件 -->
|
||||||
<!-- <SelectMenuPanel
|
<SelectMenuPanel
|
||||||
v-if="canvasManagerLoaded && !enabledRedGreenMode"
|
v-if="canvasManagerLoaded && !enabledRedGreenMode"
|
||||||
:canvas="canvasManager && canvasManager.canvas"
|
:canvas="canvasManager && canvasManager.canvas"
|
||||||
:commandManager="commandManager"
|
:commandManager="commandManager"
|
||||||
@@ -1193,7 +1193,7 @@ defineExpose({
|
|||||||
:layerManager="layerManager"
|
:layerManager="layerManager"
|
||||||
:toolManager="toolManager"
|
:toolManager="toolManager"
|
||||||
:activeTool="activeTool"
|
:activeTool="activeTool"
|
||||||
/> -->
|
/>
|
||||||
|
|
||||||
<div class="zoom-info">
|
<div class="zoom-info">
|
||||||
{{ t("Canvas.Scale") }}: {{ currentZoom }}%
|
{{ t("Canvas.Scale") }}: {{ currentZoom }}%
|
||||||
|
|||||||
@@ -280,7 +280,8 @@ export default defineComponent({
|
|||||||
setPageSize(rem) {
|
setPageSize(rem) {
|
||||||
const historyTable = this.$refs.historyTable
|
const historyTable = this.$refs.historyTable
|
||||||
const height = historyTable.offsetHeight
|
const height = historyTable.offsetHeight
|
||||||
const size = Math.trunc((height - 110) / 54)
|
const itemHeight = historyTable.getElementsByClassName("ant-table-thead")[0]?.offsetHeight || 54;
|
||||||
|
const size = Math.trunc((height - 60 - itemHeight) / itemHeight)
|
||||||
this.pageSize = Math.max(1, size)
|
this.pageSize = Math.max(1, size)
|
||||||
if (rem) {
|
if (rem) {
|
||||||
this.currentPage = 1
|
this.currentPage = 1
|
||||||
|
|||||||
Reference in New Issue
Block a user