【问题标题】:How to get the position of element transformed with css rotate如何获得用css旋转转换的元素的位置
【发布时间】:2012-06-29 01:15:12
【问题描述】:

在应用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 位置。

【问题讨论】:

  • 刷新我的数学知识后,我想出了这样的东西:var x = termin.top + Math.cos(angle) * div.height; var y = div.left + Math.sin(angle) * div.height;谁能确认这是否是正确的解决方案?

标签: javascript css rotation css-transforms


【解决方案1】:

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

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

解决方案可以在另一个SO Answer 中找到不同的问题,在此进行了增强:

// 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))
    };
};


这是一个interactive jsFiddle,它为getPositionData(); 函数提供实时更新
您将能够在以下位置看到topleft 值您控制的 CSS3 Rotation 进程结束。

参考:  jsFiddle

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

【讨论】:

    【解决方案2】:

    尝试使用element.getBoundingClientRect()

    根据MDN

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

    【讨论】:

    • 我们知道其他浏览器会考虑getBoundingClientRect 的转换吗?最重要的是:在哪一点上 IE 呢?它适用于 IE9 吗?
    • @JimboJonny from my testing 似乎 IE9 也考虑了转换(但将结果四舍五入到整个像素)。 IE10 与任何其他浏览器一样工作(不舍入结果)。
    猜你喜欢
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    相关资源
    最近更新 更多