fix
This commit is contained in:
@@ -499,26 +499,17 @@ onMounted(async () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
let trailingTimeout = null;
|
let trailingTimeout = null;
|
||||||
let throttleDelay = 100;
|
|
||||||
observer = new ResizeObserver((entries) => {
|
observer = new ResizeObserver((entries) => {
|
||||||
clearTimeout(trailingTimeout);
|
clearTimeout(trailingTimeout);
|
||||||
trailingTimeout = setTimeout(() => {
|
trailingTimeout = setTimeout(() => {
|
||||||
optimizeCanvasRendering(canvasManager.canvas, ()=> handleWindowResize());
|
optimizeCanvasRendering(canvasManager.canvas, ()=> handleWindowResize());
|
||||||
}, throttleDelay);
|
}, 200);
|
||||||
});
|
});
|
||||||
observer.observe(canvasContainerRef.value);
|
observer.observe(canvasContainerRef.value);
|
||||||
// 使用window的resize事件代替ResizeObserver
|
// 使用window的resize事件代替ResizeObserver
|
||||||
// 只有当窗口大小变化时才更新画布尺寸
|
// 只有当窗口大小变化时才更新画布尺寸
|
||||||
// window.addEventListener("resize", handleWindowResize);
|
// window.addEventListener("resize", handleWindowResize);
|
||||||
if (props.config.initZoom) {
|
setInitZoom();
|
||||||
const width = canvasManager.width;
|
|
||||||
const height = canvasManager.height;
|
|
||||||
const cwidth = props.config.width;
|
|
||||||
const cheight = props.config.height;
|
|
||||||
let zoom = Math.min(1, width / cwidth, height / cheight);
|
|
||||||
if (zoom < 1) zoom -= 0.05;
|
|
||||||
setZoom(zoom); // 设置画布缩放
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
watchEffect(() => {
|
watchEffect(() => {
|
||||||
@@ -573,13 +564,26 @@ async function handleWindowResize() {
|
|||||||
// 使用requestAnimationFrame来防止频繁更新
|
// 使用requestAnimationFrame来防止频繁更新
|
||||||
await new Promise(requestAnimationFrame);
|
await new Promise(requestAnimationFrame);
|
||||||
if(!canvasManager) return;
|
if(!canvasManager) return;
|
||||||
updateCanvasSize();
|
await updateCanvasSize();
|
||||||
// 确保显示的缩放信息是最新的
|
// 确保显示的缩放信息是最新的
|
||||||
currentZoom.value = Math.round(canvasManager.canvas.getZoom() * 100);
|
currentZoom.value = Math.round(canvasManager.canvas.getZoom() * 100);
|
||||||
|
setInitZoom();
|
||||||
await new Promise(requestAnimationFrame);
|
await new Promise(requestAnimationFrame);
|
||||||
await layerManager?.updateLayersObjectsInteractivity?.();
|
await layerManager?.updateLayersObjectsInteractivity?.();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setInitZoom(){
|
||||||
|
if (props.config.initZoom) {
|
||||||
|
const width = canvasManager.width;
|
||||||
|
const height = canvasManager.height;
|
||||||
|
const cwidth = props.config.width;
|
||||||
|
const cheight = props.config.height;
|
||||||
|
let zoom = Math.min(1, width / cwidth, height / cheight);
|
||||||
|
if (zoom < 1) zoom -= 0.05;
|
||||||
|
setZoom(zoom); // 设置画布缩放
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function resetZoom() {
|
function resetZoom() {
|
||||||
canvasManager.resetZoom();
|
canvasManager.resetZoom();
|
||||||
}
|
}
|
||||||
@@ -625,13 +629,13 @@ function zoomOut() {
|
|||||||
canvasManager.animateZoom(centerPoint, newZoom);
|
canvasManager.animateZoom(centerPoint, newZoom);
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateCanvasSize() {
|
async function updateCanvasSize() {
|
||||||
if (canvasManager && canvasContainerRef.value) {
|
if (canvasManager && canvasContainerRef.value) {
|
||||||
const containerWidth = canvasContainerRef.value.clientWidth;
|
const containerWidth = canvasContainerRef.value.clientWidth;
|
||||||
const containerHeight = canvasContainerRef.value.clientHeight;
|
const containerHeight = canvasContainerRef.value.clientHeight;
|
||||||
|
|
||||||
// 普通模式下,更新画布大小,这会同时重置视图和居中所有元素
|
// 普通模式下,更新画布大小,这会同时重置视图和居中所有元素
|
||||||
canvasManager.setCanvasSize(containerWidth, containerHeight);
|
await canvasManager.setCanvasSize(containerWidth, containerHeight);
|
||||||
|
|
||||||
// // 如果启用了红绿图模式,使用 layerManager 的缩放方法
|
// // 如果启用了红绿图模式,使用 layerManager 的缩放方法
|
||||||
// if (props.enabledRedGreenMode && layerManager) {
|
// if (props.enabledRedGreenMode && layerManager) {
|
||||||
|
|||||||
@@ -444,7 +444,7 @@ export class CanvasManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 居中所有画布元素,包括背景层和其他元素
|
// 居中所有画布元素,包括背景层和其他元素
|
||||||
this.centerAllObjects();
|
await this.centerAllObjects();
|
||||||
|
|
||||||
// // 重新渲染画布使变更生效
|
// // 重新渲染画布使变更生效
|
||||||
// this.canvas.renderAll();
|
// this.canvas.renderAll();
|
||||||
@@ -469,7 +469,6 @@ export class CanvasManager {
|
|||||||
*/
|
*/
|
||||||
async centerAllObjects() {
|
async centerAllObjects() {
|
||||||
if (!this.canvas) return;
|
if (!this.canvas) return;
|
||||||
|
|
||||||
// 获取所有可见对象(不是背景元素的对象)
|
// 获取所有可见对象(不是背景元素的对象)
|
||||||
const allObjects = this.canvas.getObjects();
|
const allObjects = this.canvas.getObjects();
|
||||||
if (allObjects.length === 0) return;
|
if (allObjects.length === 0) return;
|
||||||
@@ -484,9 +483,6 @@ export class CanvasManager {
|
|||||||
// 获取背景对象
|
// 获取背景对象
|
||||||
const backgroundObject = visibleObjects.find((obj) => obj.isBackground);
|
const backgroundObject = visibleObjects.find((obj) => obj.isBackground);
|
||||||
|
|
||||||
// !this.canvas?.clipPath &&
|
|
||||||
// this.centerBackgroundLayer(this.canvas.width, this.canvas.height);
|
|
||||||
|
|
||||||
this.canvas?.clipPath?.set?.({
|
this.canvas?.clipPath?.set?.({
|
||||||
left: this.width / 2,
|
left: this.width / 2,
|
||||||
top: this.height / 2,
|
top: this.height / 2,
|
||||||
@@ -579,6 +575,9 @@ export class CanvasManager {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
!this.canvas?.clipPath &&
|
||||||
|
this.centerBackgroundLayer(this.canvas.width, this.canvas.height);
|
||||||
|
|
||||||
// 如果有背景层,更新蒙层位置
|
// 如果有背景层,更新蒙层位置
|
||||||
if (backgroundObject && CanvasConfig.isCropBackground) {
|
if (backgroundObject && CanvasConfig.isCropBackground) {
|
||||||
this.updateMaskPosition(backgroundObject);
|
this.updateMaskPosition(backgroundObject);
|
||||||
|
|||||||
@@ -697,6 +697,7 @@ export class LayerManager {
|
|||||||
* 初始化图层,确保有背景层、固定图层和一个空白图层
|
* 初始化图层,确保有背景层、固定图层和一个空白图层
|
||||||
*/
|
*/
|
||||||
async initializeLayers() {
|
async initializeLayers() {
|
||||||
|
console.log("初始化图层",this.layers.value.length)
|
||||||
// 如果没有任何图层,创建背景层、固定图层和一个空白图层
|
// 如果没有任何图层,创建背景层、固定图层和一个空白图层
|
||||||
if (this.layers.value.length === 0) {
|
if (this.layers.value.length === 0) {
|
||||||
// 创建背景图层
|
// 创建背景图层
|
||||||
|
|||||||
@@ -417,7 +417,6 @@
|
|||||||
}"
|
}"
|
||||||
@change-canvas="changeCanvas"
|
@change-canvas="changeCanvas"
|
||||||
@canvas-init="canvasInit"
|
@canvas-init="canvasInit"
|
||||||
@canvas-load-json-success="canvasLoadJsonSuccess"
|
|
||||||
isFixedErasable
|
isFixedErasable
|
||||||
showFixedLayer
|
showFixedLayer
|
||||||
>
|
>
|
||||||
|
|||||||
Reference in New Issue
Block a user