mirror of
https://github.com/idrawjs/idraw
synced 2026-05-24 10:08:34 +00:00
feat: implement limit ratio of element operation
This commit is contained in:
parent
94ddcadde7
commit
a4f4acab50
2 changed files with 299 additions and 127 deletions
|
|
@ -219,51 +219,106 @@ function calcuScaleElemPosition(
|
|||
break;
|
||||
}
|
||||
case 'top': {
|
||||
if (elem.angle === 0 || Math.abs(elem.angle) < limitQbliqueAngle) {
|
||||
if (p.h - moveY > 0) {
|
||||
p.y += moveY;
|
||||
p.h -= moveY;
|
||||
}
|
||||
} else if (elem.angle > 0 || elem.angle < 0) {
|
||||
const angle =
|
||||
elem.angle > 0 ? elem.angle : Math.max(0, elem.angle + 360);
|
||||
let moveDist = calcMoveDist(moveX, moveY);
|
||||
let centerX = p.x + elem.w / 2;
|
||||
let centerY = p.y + elem.h / 2;
|
||||
if (angle < 90) {
|
||||
moveDist = 0 - changeMoveDistDirect(moveDist, moveY);
|
||||
const radian = parseRadian(angle);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX + centerMoveDist * Math.sin(radian);
|
||||
centerY = centerY - centerMoveDist * Math.cos(radian);
|
||||
} else if (angle < 180) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveX);
|
||||
const radian = parseRadian(angle - 90);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX + centerMoveDist * Math.cos(radian);
|
||||
centerY = centerY + centerMoveDist * Math.sin(radian);
|
||||
} else if (angle < 270) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveY);
|
||||
const radian = parseRadian(angle - 180);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX - centerMoveDist * Math.sin(radian);
|
||||
centerY = centerY + centerMoveDist * Math.cos(radian);
|
||||
} else if (angle < 360) {
|
||||
moveDist = 0 - changeMoveDistDirect(moveDist, moveX);
|
||||
const radian = parseRadian(angle - 270);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX - centerMoveDist * Math.cos(radian);
|
||||
centerY = centerY - centerMoveDist * Math.sin(radian);
|
||||
}
|
||||
if (p.h + moveDist > 0) {
|
||||
p.h = p.h + moveDist;
|
||||
p.x = centerX - p.w / 2;
|
||||
p.y = centerY - p.h / 2;
|
||||
if (elem.operation?.limitRatio === true) {
|
||||
if (elem.angle === 0 || Math.abs(elem.angle) < limitQbliqueAngle) {
|
||||
if (p.h - moveY > 0) {
|
||||
p.y += moveY;
|
||||
p.h -= moveY;
|
||||
p.x += ((moveY / elem.h) * elem.w) / 2;
|
||||
p.w -= (moveY / elem.h) * elem.w;
|
||||
}
|
||||
} else if (elem.angle > 0 || elem.angle < 0) {
|
||||
const angle =
|
||||
elem.angle > 0 ? elem.angle : Math.max(0, elem.angle + 360);
|
||||
let moveDist = calcMoveDist(moveX, moveY);
|
||||
let centerX = p.x + elem.w / 2;
|
||||
let centerY = p.y + elem.h / 2;
|
||||
if (angle < 90) {
|
||||
moveDist = 0 - changeMoveDistDirect(moveDist, moveY);
|
||||
const radian = parseRadian(angle);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX + centerMoveDist * Math.sin(radian);
|
||||
centerY = centerY - centerMoveDist * Math.cos(radian);
|
||||
} else if (angle < 180) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveX);
|
||||
const radian = parseRadian(angle - 90);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX + centerMoveDist * Math.cos(radian);
|
||||
centerY = centerY + centerMoveDist * Math.sin(radian);
|
||||
} else if (angle < 270) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveY);
|
||||
const radian = parseRadian(angle - 180);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX - centerMoveDist * Math.sin(radian);
|
||||
centerY = centerY + centerMoveDist * Math.cos(radian);
|
||||
} else if (angle < 360) {
|
||||
moveDist = 0 - changeMoveDistDirect(moveDist, moveX);
|
||||
const radian = parseRadian(angle - 270);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX - centerMoveDist * Math.cos(radian);
|
||||
centerY = centerY - centerMoveDist * Math.sin(radian);
|
||||
}
|
||||
if (p.h + moveDist > 0) {
|
||||
p.h = p.h + moveDist;
|
||||
p.w = p.w + (moveDist / elem.h) * elem.w;
|
||||
p.x = centerX - p.w / 2;
|
||||
p.y = centerY - p.h / 2;
|
||||
}
|
||||
} else {
|
||||
if (p.h - moveY > 0) {
|
||||
p.y += moveY;
|
||||
p.h -= moveY;
|
||||
p.x -= moveX / 2;
|
||||
p.w += moveX;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (p.h - moveY > 0) {
|
||||
p.y += moveY;
|
||||
p.h -= moveY;
|
||||
if (elem.angle === 0 || Math.abs(elem.angle) < limitQbliqueAngle) {
|
||||
if (p.h - moveY > 0) {
|
||||
p.y += moveY;
|
||||
p.h -= moveY;
|
||||
}
|
||||
} else if (elem.angle > 0 || elem.angle < 0) {
|
||||
const angle =
|
||||
elem.angle > 0 ? elem.angle : Math.max(0, elem.angle + 360);
|
||||
let moveDist = calcMoveDist(moveX, moveY);
|
||||
let centerX = p.x + elem.w / 2;
|
||||
let centerY = p.y + elem.h / 2;
|
||||
if (angle < 90) {
|
||||
moveDist = 0 - changeMoveDistDirect(moveDist, moveY);
|
||||
const radian = parseRadian(angle);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX + centerMoveDist * Math.sin(radian);
|
||||
centerY = centerY - centerMoveDist * Math.cos(radian);
|
||||
} else if (angle < 180) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveX);
|
||||
const radian = parseRadian(angle - 90);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX + centerMoveDist * Math.cos(radian);
|
||||
centerY = centerY + centerMoveDist * Math.sin(radian);
|
||||
} else if (angle < 270) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveY);
|
||||
const radian = parseRadian(angle - 180);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX - centerMoveDist * Math.sin(radian);
|
||||
centerY = centerY + centerMoveDist * Math.cos(radian);
|
||||
} else if (angle < 360) {
|
||||
moveDist = 0 - changeMoveDistDirect(moveDist, moveX);
|
||||
const radian = parseRadian(angle - 270);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX - centerMoveDist * Math.cos(radian);
|
||||
centerY = centerY - centerMoveDist * Math.sin(radian);
|
||||
}
|
||||
if (p.h + moveDist > 0) {
|
||||
p.h = p.h + moveDist;
|
||||
p.x = centerX - p.w / 2;
|
||||
p.y = centerY - p.h / 2;
|
||||
}
|
||||
} else {
|
||||
if (p.h - moveY > 0) {
|
||||
p.y += moveY;
|
||||
p.h -= moveY;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
@ -353,50 +408,104 @@ function calcuScaleElemPosition(
|
|||
break;
|
||||
}
|
||||
case 'right': {
|
||||
if (elem.angle === 0 || Math.abs(elem.angle) < limitQbliqueAngle) {
|
||||
if (elem.w + moveX > 0) {
|
||||
p.w += moveX;
|
||||
}
|
||||
} else if (elem.angle > 0 || elem.angle < 0) {
|
||||
const angle =
|
||||
elem.angle > 0 ? elem.angle : Math.max(0, elem.angle + 360);
|
||||
let moveDist = calcMoveDist(moveX, moveY);
|
||||
let centerX = p.x + elem.w / 2;
|
||||
let centerY = p.y + elem.h / 2;
|
||||
if (angle < 90) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveY);
|
||||
const radian = parseRadian(angle);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX + centerMoveDist * Math.cos(radian);
|
||||
centerY = centerY + centerMoveDist * Math.sin(radian);
|
||||
} else if (angle < 180) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveY);
|
||||
const radian = parseRadian(angle - 90);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX - centerMoveDist * Math.sin(radian);
|
||||
centerY = centerY + centerMoveDist * Math.cos(radian);
|
||||
} else if (angle < 270) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveY);
|
||||
const radian = parseRadian(angle - 180);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX + centerMoveDist * Math.cos(radian);
|
||||
centerY = centerY + centerMoveDist * Math.sin(radian);
|
||||
moveDist = 0 - moveDist;
|
||||
} else if (angle < 360) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveX);
|
||||
const radian = parseRadian(angle - 270);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX + centerMoveDist * Math.sin(radian);
|
||||
centerY = centerY - centerMoveDist * Math.cos(radian);
|
||||
}
|
||||
if (p.w + moveDist > 0) {
|
||||
p.w = p.w + moveDist;
|
||||
p.x = centerX - p.w / 2;
|
||||
p.y = centerY - p.h / 2;
|
||||
if (elem.operation?.limitRatio === true) {
|
||||
if (elem.angle === 0 || Math.abs(elem.angle) < limitQbliqueAngle) {
|
||||
if (elem.w + moveX > 0) {
|
||||
p.w += moveX;
|
||||
p.h += (moveX * elem.h) / elem.w;
|
||||
p.y -= (moveX * elem.h) / elem.w / 2;
|
||||
}
|
||||
} else if (elem.angle > 0 || elem.angle < 0) {
|
||||
const angle =
|
||||
elem.angle > 0 ? elem.angle : Math.max(0, elem.angle + 360);
|
||||
let moveDist = calcMoveDist(moveX, moveY);
|
||||
let centerX = p.x + elem.w / 2;
|
||||
let centerY = p.y + elem.h / 2;
|
||||
if (angle < 90) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveY);
|
||||
const radian = parseRadian(angle);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX + centerMoveDist * Math.cos(radian);
|
||||
centerY = centerY + centerMoveDist * Math.sin(radian);
|
||||
} else if (angle < 180) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveY);
|
||||
const radian = parseRadian(angle - 90);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX - centerMoveDist * Math.sin(radian);
|
||||
centerY = centerY + centerMoveDist * Math.cos(radian);
|
||||
} else if (angle < 270) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveY);
|
||||
const radian = parseRadian(angle - 180);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX + centerMoveDist * Math.cos(radian);
|
||||
centerY = centerY + centerMoveDist * Math.sin(radian);
|
||||
moveDist = 0 - moveDist;
|
||||
} else if (angle < 360) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveX);
|
||||
const radian = parseRadian(angle - 270);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX + centerMoveDist * Math.sin(radian);
|
||||
centerY = centerY - centerMoveDist * Math.cos(radian);
|
||||
}
|
||||
if (p.w + moveDist > 0) {
|
||||
p.w = p.w + moveDist;
|
||||
p.h = p.h + (moveDist / elem.w) * elem.h;
|
||||
p.x = centerX - p.w / 2;
|
||||
p.y = centerY - p.h / 2;
|
||||
}
|
||||
} else {
|
||||
if (elem.w + moveX > 0) {
|
||||
p.w += moveX;
|
||||
p.h += (moveX * elem.h) / elem.w;
|
||||
p.y -= (moveX * elem.h) / elem.w / 2;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (elem.w + moveX > 0) {
|
||||
p.w += moveX;
|
||||
if (elem.angle === 0 || Math.abs(elem.angle) < limitQbliqueAngle) {
|
||||
if (elem.w + moveX > 0) {
|
||||
p.w += moveX;
|
||||
}
|
||||
} else if (elem.angle > 0 || elem.angle < 0) {
|
||||
const angle =
|
||||
elem.angle > 0 ? elem.angle : Math.max(0, elem.angle + 360);
|
||||
let moveDist = calcMoveDist(moveX, moveY);
|
||||
let centerX = p.x + elem.w / 2;
|
||||
let centerY = p.y + elem.h / 2;
|
||||
if (angle < 90) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveY);
|
||||
const radian = parseRadian(angle);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX + centerMoveDist * Math.cos(radian);
|
||||
centerY = centerY + centerMoveDist * Math.sin(radian);
|
||||
} else if (angle < 180) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveY);
|
||||
const radian = parseRadian(angle - 90);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX - centerMoveDist * Math.sin(radian);
|
||||
centerY = centerY + centerMoveDist * Math.cos(radian);
|
||||
} else if (angle < 270) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveY);
|
||||
const radian = parseRadian(angle - 180);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX + centerMoveDist * Math.cos(radian);
|
||||
centerY = centerY + centerMoveDist * Math.sin(radian);
|
||||
moveDist = 0 - moveDist;
|
||||
} else if (angle < 360) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveX);
|
||||
const radian = parseRadian(angle - 270);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX + centerMoveDist * Math.sin(radian);
|
||||
centerY = centerY - centerMoveDist * Math.cos(radian);
|
||||
}
|
||||
if (p.w + moveDist > 0) {
|
||||
p.w = p.w + moveDist;
|
||||
p.x = centerX - p.w / 2;
|
||||
p.y = centerY - p.h / 2;
|
||||
}
|
||||
} else {
|
||||
if (elem.w + moveX > 0) {
|
||||
p.w += moveX;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -426,49 +535,102 @@ function calcuScaleElemPosition(
|
|||
break;
|
||||
}
|
||||
case 'bottom': {
|
||||
if (elem.angle === 0 || Math.abs(elem.angle) < limitQbliqueAngle) {
|
||||
if (elem.h + moveY > 0) {
|
||||
p.h += moveY;
|
||||
}
|
||||
} else if (elem.angle > 0 || elem.angle < 0) {
|
||||
const angle =
|
||||
elem.angle > 0 ? elem.angle : Math.max(0, elem.angle + 360);
|
||||
let moveDist = calcMoveDist(moveX, moveY);
|
||||
let centerX = p.x + elem.w / 2;
|
||||
let centerY = p.y + elem.h / 2;
|
||||
if (angle < 90) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveY);
|
||||
const radian = parseRadian(angle);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX - centerMoveDist * Math.sin(radian);
|
||||
centerY = centerY + centerMoveDist * Math.cos(radian);
|
||||
} else if (angle < 180) {
|
||||
moveDist = 0 - changeMoveDistDirect(moveDist, moveX);
|
||||
const radian = parseRadian(angle - 90);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX - centerMoveDist * Math.cos(radian);
|
||||
centerY = centerY - centerMoveDist * Math.sin(radian);
|
||||
} else if (angle < 270) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveX);
|
||||
const radian = parseRadian(angle - 180);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX + centerMoveDist * Math.sin(radian);
|
||||
centerY = centerY - centerMoveDist * Math.cos(radian);
|
||||
} else if (angle < 360) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveX);
|
||||
const radian = parseRadian(angle - 270);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX + centerMoveDist * Math.cos(radian);
|
||||
centerY = centerY + centerMoveDist * Math.sin(radian);
|
||||
}
|
||||
if (p.h + moveDist > 0) {
|
||||
p.h = p.h + moveDist;
|
||||
p.x = centerX - p.w / 2;
|
||||
p.y = centerY - p.h / 2;
|
||||
if (elem.operation?.limitRatio === true) {
|
||||
if (elem.angle === 0 || Math.abs(elem.angle) < limitQbliqueAngle) {
|
||||
if (elem.h + moveY > 0) {
|
||||
p.h += moveY;
|
||||
p.x -= ((moveY / elem.h) * elem.w) / 2;
|
||||
p.w += (moveY / elem.h) * elem.w;
|
||||
}
|
||||
} else if (elem.angle > 0 || elem.angle < 0) {
|
||||
const angle =
|
||||
elem.angle > 0 ? elem.angle : Math.max(0, elem.angle + 360);
|
||||
let moveDist = calcMoveDist(moveX, moveY);
|
||||
let centerX = p.x + elem.w / 2;
|
||||
let centerY = p.y + elem.h / 2;
|
||||
if (angle < 90) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveY);
|
||||
const radian = parseRadian(angle);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX - centerMoveDist * Math.sin(radian);
|
||||
centerY = centerY + centerMoveDist * Math.cos(radian);
|
||||
} else if (angle < 180) {
|
||||
moveDist = 0 - changeMoveDistDirect(moveDist, moveX);
|
||||
const radian = parseRadian(angle - 90);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX - centerMoveDist * Math.cos(radian);
|
||||
centerY = centerY - centerMoveDist * Math.sin(radian);
|
||||
} else if (angle < 270) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveX);
|
||||
const radian = parseRadian(angle - 180);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX + centerMoveDist * Math.sin(radian);
|
||||
centerY = centerY - centerMoveDist * Math.cos(radian);
|
||||
} else if (angle < 360) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveX);
|
||||
const radian = parseRadian(angle - 270);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX + centerMoveDist * Math.cos(radian);
|
||||
centerY = centerY + centerMoveDist * Math.sin(radian);
|
||||
}
|
||||
if (p.h + moveDist > 0) {
|
||||
p.h = p.h + moveDist;
|
||||
p.w = p.w + (moveDist / elem.h) * elem.w;
|
||||
p.x = centerX - p.w / 2;
|
||||
p.y = centerY - p.h / 2;
|
||||
}
|
||||
} else {
|
||||
if (elem.h + moveY > 0) {
|
||||
p.h += moveY;
|
||||
p.x -= ((moveY / elem.h) * elem.w) / 2;
|
||||
p.w += (moveY / elem.h) * elem.w;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (elem.h + moveY > 0) {
|
||||
p.h += moveY;
|
||||
if (elem.angle === 0 || Math.abs(elem.angle) < limitQbliqueAngle) {
|
||||
if (elem.h + moveY > 0) {
|
||||
p.h += moveY;
|
||||
}
|
||||
} else if (elem.angle > 0 || elem.angle < 0) {
|
||||
const angle =
|
||||
elem.angle > 0 ? elem.angle : Math.max(0, elem.angle + 360);
|
||||
let moveDist = calcMoveDist(moveX, moveY);
|
||||
let centerX = p.x + elem.w / 2;
|
||||
let centerY = p.y + elem.h / 2;
|
||||
if (angle < 90) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveY);
|
||||
const radian = parseRadian(angle);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX - centerMoveDist * Math.sin(radian);
|
||||
centerY = centerY + centerMoveDist * Math.cos(radian);
|
||||
} else if (angle < 180) {
|
||||
moveDist = 0 - changeMoveDistDirect(moveDist, moveX);
|
||||
const radian = parseRadian(angle - 90);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX - centerMoveDist * Math.cos(radian);
|
||||
centerY = centerY - centerMoveDist * Math.sin(radian);
|
||||
} else if (angle < 270) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveX);
|
||||
const radian = parseRadian(angle - 180);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX + centerMoveDist * Math.sin(radian);
|
||||
centerY = centerY - centerMoveDist * Math.cos(radian);
|
||||
} else if (angle < 360) {
|
||||
moveDist = changeMoveDistDirect(moveDist, moveX);
|
||||
const radian = parseRadian(angle - 270);
|
||||
const centerMoveDist = moveDist / 2;
|
||||
centerX = centerX + centerMoveDist * Math.cos(radian);
|
||||
centerY = centerY + centerMoveDist * Math.sin(radian);
|
||||
}
|
||||
if (p.h + moveDist > 0) {
|
||||
p.h = p.h + moveDist;
|
||||
p.x = centerX - p.w / 2;
|
||||
p.y = centerY - p.h / 2;
|
||||
}
|
||||
} else {
|
||||
if (elem.h + moveY > 0) {
|
||||
p.h += moveY;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -503,6 +665,8 @@ function calcuScaleElemPosition(
|
|||
if (elem.w - moveX > 0) {
|
||||
p.x += moveX;
|
||||
p.w -= moveX;
|
||||
p.h -= (moveX / elem.w) * elem.h;
|
||||
p.y += ((moveX / elem.w) * elem.h) / 2;
|
||||
}
|
||||
} else if (elem.angle > 0 || elem.angle < 0) {
|
||||
const angle =
|
||||
|
|
@ -537,6 +701,7 @@ function calcuScaleElemPosition(
|
|||
}
|
||||
if (p.w + moveDist > 0) {
|
||||
p.w = p.w + moveDist;
|
||||
p.h = p.h + (moveDist / elem.w) * elem.h;
|
||||
p.x = centerX - p.w / 2;
|
||||
p.y = centerY - p.h / 2;
|
||||
}
|
||||
|
|
@ -544,6 +709,8 @@ function calcuScaleElemPosition(
|
|||
if (elem.w - moveX > 0) {
|
||||
p.x += moveX;
|
||||
p.w -= moveX;
|
||||
p.h -= (moveX / elem.w) * elem.h;
|
||||
p.y += ((moveX / elem.w) * elem.h) / 2;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -42,6 +42,10 @@ const data = {
|
|||
type: 'image',
|
||||
desc: {
|
||||
src: './images/computer.png'
|
||||
},
|
||||
operation: {
|
||||
// disableRotate: true,
|
||||
limitRatio: true
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -51,11 +55,12 @@ const data = {
|
|||
w: 100,
|
||||
h: 100,
|
||||
type: 'svg',
|
||||
angle: 135,
|
||||
desc: {
|
||||
svg: '<svg t="1622524892065" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9337" width="200" height="200"><path d="M511.6 76.3C264.3 76.2 64 276.4 64 523.5 64 718.9 189.3 885 363.8 946c23.5 5.9 19.9-10.8 19.9-22.2v-77.5c-135.7 15.9-141.2-73.9-150.3-88.9C215 726 171.5 718 184.5 703c30.9-15.9 62.4 4 98.9 57.9 26.4 39.1 77.9 32.5 104 26 5.7-23.5 17.9-44.5 34.7-60.8-140.6-25.2-199.2-111-199.2-213 0-49.5 16.3-95 48.3-131.7-20.4-60.5 1.9-112.3 4.9-120 58.1-5.2 118.5 41.6 123.2 45.3 33-8.9 70.7-13.6 112.9-13.6 42.4 0 80.2 4.9 113.5 13.9 11.3-8.6 67.3-48.8 121.3-43.9 2.9 7.7 24.7 58.3 5.5 118 32.4 36.8 48.9 82.7 48.9 132.3 0 102.2-59 188.1-200 212.9 23.5 23.2 38.1 55.4 38.1 91v112.5c0.8 9 0 17.9 15 17.9 177.1-59.7 304.6-227 304.6-424.1 0-247.2-200.4-447.3-447.5-447.3z" p-id="9338"></path></svg>'
|
||||
},
|
||||
operation: {
|
||||
disableRotate: true,
|
||||
// disableRotate: true,
|
||||
limitRatio: true
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue