1

很简单,我的问题就是标题:

有没有办法在元素transform:skew();应用到元素后获取它的高度?

例如,如果一个元素的高度是 100px 并且顶部偏移量是 500px 预变换,在对其应用倾斜后,高度实际上可能是 150px 并且顶部偏移量实际上可能是 450px,但标准的 height() 和偏移量jQuery 中的 () 方法仍然报告原始值。

有什么解决方法吗?

提前致谢。

4

1 回答 1

6

正如上面评论中提到的,高度和宽度的值没有改变,因为它们是基于没有样式的 DOM 元素。但是我注意到 offset() 方法从转换后的元素(Chrome 23 和 Firefox 16 OSX)返回正确的值。

为了给你一个解决方案——对于像倾斜和旋转这样的二维变换,我对变换做了基本的数学运算,下面的函数根据元素变换矩阵返回宽度和高度值。这适用于我尝试的所有 2d 转换、旋转/倾斜和两者的组合(同样,在 Chrome 23 和 Firefox 16 OSX 上)。

function getBoundingBox(element){
    // Get the transformation matrix as a string
    var tm = element.css('transform');

    // Transform the string to an array
    var regexp = /-?\d+[\.\d]*/g;
    tm = tm.match(regexp);

    // Get the size of the object and calculate the bounding box
    var h = element.height();
    var w = element.width();
    var th = Math.abs(h * tm[0]) + Math.abs(w * tm[1]);
    var tw = Math.abs(h * tm[2]) + Math.abs(w * tm[3]);

    return {'height':th,'width':tw}
}

有关边界框和计算的更多信息和解释

于 2012-11-20T00:10:03.230 回答