我想知道如何获取元素的缩放值?
我尝试了`$(element).css('-webkit-transform');`,它返回了`matrix(scaleX,0,0,scaleY,0,0);`。有没有办法只获取`scaleX`和`scaleY`的值?
我尝试了`$(element).css('-webkit-transform');`,它返回了`matrix(scaleX,0,0,scaleY,0,0);`。有没有办法只获取`scaleX`和`scaleY`的值?
找出文档和元素之间比例因子的最简单解决方案如下:
var element = document.querySelector('...');
var scaleX = element.getBoundingClientRect().width / element.offsetWidth;
这有效是因为 getBoundingClientRect 返回实际尺寸,而 offsetWidth/Height 是未缩放的尺寸。
如果它是由一个矩阵指定的,我猜你无法使用简单直接的方法,但你可以轻松地解析该值:
var matrixRegex = /matrix\((-?\d*\.?\d+),\s*0,\s*0,\s*(-?\d*\.?\d+),\s*0,\s*0\)/,
matches = $(element).css('-webkit-transform').match(matrixRegex);
matches[1]
将包含scaleX,matches[2]
将包含scaleY。如果可能已应用其他转换,则需要略微调整正则表达式,因为现在它假定所有其他参数都为0。
获取比例值的一种方法可能是删除任何变换,测量元素的计算宽度/高度,然后再添加它们并重新测量。然后将新旧值相除。我还没有尝试过,但可能有效。jQuery本身对许多测量使用类似的方法,它甚至有一个未记录文档的$.swap()
函数专门用于此目的。
PS:你也使用了-o-transform
、-moz-transform
和-ms-transform
,对吗?matrixRegex = /matrix\(\s*(-?\d*\.?\d*),\s*(-?\d*\.?\d*),\s*(-?\d*\.?\d*),\s*(-?\d*\.?\d*),\s*(-?\d*\.?\d*),\s*(-?\d*\.?\d*)\)/
。 - Massalenode = $("#yourid")[0];
var curTransform = new WebKitCSSMatrix(window.getComputedStyle(node).webkitTransform);
alert(curTransform.a); // curTransform is an object,
alert(curTransform.d); // a through f represent all values of the transformation matrix
var element = document.getElementById("elementID");
// returns matrix(1,0,0,1,0,0)
var matrix = window.getComputedStyle(element).transform;
var matrixArray = matrix.replace("matrix(", "").split(",");
var scaleX = parseFloat(matrixArray[0]); // convert from string to number
var scaleY = parseFloat(matrixArray[3]);
// bonus round - gets translate values
var translateX = parseFloat(matrixArray[4]);
var translateY = parseFloat(matrixArray[5]); // parseFloat ignores ")"
虽然对于这位OP来说可能已经太晚了,但是在未来这可能会有用。有一种简单的方法可以使用分割来实现:
function getTransformValue(element,property){
var values = element[0].style.webkitTransform.split(")");
for (var key in values){
var val = values[key];
var prop = val.split("(");
if (prop[0].trim() == property)
return prop[1];
}
return false;
}
const { width, height } = element.getBoundingClientRect()
const scale = { x : element.offsetWidth / width, y : element.offsetHeight / height }
它将可视尺寸与非缩放尺寸进行比较。因此,即使嵌套了缩放元素,它也可以正常工作。
const scale = { x: element.offsetWidth / width, y: node.offsetHeight / element }
。 - Marcelo Barros使用正则表达式
element.style.transform.match(/scale\(([1-9\.])\)/)[1]
element.getBoundingClientRect().width
不会返回缩放后的宽度,而只是普通宽度。我改用了window.screen.width
。 - Sergey Snegirev