24

rotate在应用过滤器后,我在获取 div 的位置时遇到问题。我有一端的位置、它的高度和旋转的角度,但是在检查了这个过滤器在 MDN 上的实际作用之后 ("[cos(angle) sin(angle) -sin(angle) cos(angle) 0 0]") 我还是不知道怎么破解。

例子 :

在此处输入图像描述

我感兴趣的 div 是虚线。它当时的造型是:

left: 80px; top: 12px; height: 69.5122px; width: 2px; -moz-transform: rotate(-1.21366rad);

top/left描述它开始的位置。)我试图得到top/left结束的位置。

4

2 回答 2

16

根据您当前的问题和您要求的确认:

var x = termin.top + Math.cos(angle) * div.height;
var y = div.left + Math.sin(angle) * div.height;

该解决方案可以在另一个SO Answer for a different question中找到,在此处进行了增强:

// return an object with full width/height (including borders), top/bottom coordinates
var getPositionData = function(el) {
    return $.extend({
        width: el.outerWidth(false),
        height: el.outerHeight(false)
    }, el.offset());
};

// get rotated dimensions   
var transformedDimensions = function(el, angle) {
    var dimensions = getPositionData(el);
    return {
        width: dimensions.width + Math.ceil(dimensions.width * Math.cos(angle)),
        height: dimensions.height + Math.ceil(dimensions.height * Math.cos(angle))
    };
};


这是一个提供实时更新功能的交互式jsFiddle 。您将能够在您控制的CSS3 旋转过程结束时看到和值。getPositionData();
topleft

参考:   jsFiddle

状态更新:上面的 jsFiddle 适用于0-90deg并且可以被批准用于所有角度和不同的单位,例如rad、grad 和 turn

于 2012-07-01T23:42:53.440 回答
5

尝试使用element.getBoundingClientRect()

根据MDN

从 Gecko 12.0 (Firefox 12.0 / Thunderbird 12.0) 开始,在计算元素的边界矩形时会考虑 CSS 变换的效果。

于 2012-07-03T21:13:50.307 回答