|
@@ -316,3 +316,47 @@ export const removeClass = (ele: HTMLElement, cls: string) => {
|
|
|
export const isExternal = (path: string) => {
|
|
|
return /^(https?:|http?:|mailto:|tel:)/.test(path);
|
|
|
};
|
|
|
+
|
|
|
+export const getTransformScale = (element) => {
|
|
|
+ // 获取元素的transform属性值
|
|
|
+ const transform = window.getComputedStyle(element).transform || 'none';
|
|
|
+
|
|
|
+ // 检查是否包含scale变换
|
|
|
+ if (transform === 'none') {
|
|
|
+ return { scaleX: 1, scaleY: 1 };
|
|
|
+ }
|
|
|
+
|
|
|
+ // 正则表达式用于匹配scale变换的部分
|
|
|
+ // 注意:这个正则表达式假设transform属性只包含一个scale变换,或者scale变换是第一个或最后一个
|
|
|
+ // 在更复杂的场景中,你可能需要更复杂的解析逻辑
|
|
|
+ const matrixValues = transform.match(
|
|
|
+ /^matrix\((\d+\.?\d*e?[\-+]?\d*),\s*(\d+\.?\d*e?[\-+]?\d*),\s*(\d+\.?\d*e?[\-+]?\d*),\s*(\d+\.?\d*e?[\-+]?\d*),\s*(\d+\.?\d*e?[\-+]?\d*),\s*(\d+\.?\d*e?[\-+]?\d*)\)$/
|
|
|
+ );
|
|
|
+
|
|
|
+ if (matrixValues) {
|
|
|
+ // 矩阵值:a, b, c, d, tx, ty
|
|
|
+ // 对于2D的scale变换,a = scaleX, d = scaleY
|
|
|
+ const scaleX = parseFloat(matrixValues[1]);
|
|
|
+ const scaleY = parseFloat(matrixValues[4]);
|
|
|
+ return { scaleX, scaleY };
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果transform属性包含多个变换,并且你想提取scale,你可能需要更复杂的逻辑
|
|
|
+ // 这里我们简单处理只包含单个scale变换的情况
|
|
|
+ const scaleMatch = transform.match(/scale\(([^)]+)\)/);
|
|
|
+ if (scaleMatch) {
|
|
|
+ // 如果scale变换是统一的(即scaleX = scaleY),它将是一个单独的数字
|
|
|
+ // 否则,它将是一个由逗号分隔的两个数字(scaleX, scaleY)
|
|
|
+ const scaleValues = scaleMatch[1].split(',').map(Number);
|
|
|
+ if (scaleValues.length === 1) {
|
|
|
+ // 统一的缩放比例
|
|
|
+ return { scaleX: scaleValues[0], scaleY: scaleValues[0] };
|
|
|
+ } else if (scaleValues.length === 2) {
|
|
|
+ // 分别的scaleX和scaleY
|
|
|
+ return { scaleX: scaleValues[0], scaleY: scaleValues[1] };
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果没有找到scale变换,返回默认的缩放比例
|
|
|
+ return { scaleX: 1, scaleY: 1 };
|
|
|
+};
|