Как мне получить позицию элемента после перевода css3 в JavaScript? - PullRequest
21 голосов
/ 12 февраля 2011

Я видел это в двух разных формах на stackoverflow, но решения не работают для меня.

По сути, у меня есть пункт, который я буду переводить.Когда я выполняю obj.style.left или obj.offsetLeft, после того, как элемент был переведен, я получаю 0. Могу ли я в любом случае получить координаты / позицию элемента после того, как он был переведен с помощью css3?

Я не могу использовать jQuery (потому что я не могу, а также потому, что я хочу понять решение, а не просто использовать библиотеку, не понимая, что происходит внизу)

Есть идеи?

Большое спасибо!

Ответы [ 2 ]

32 голосов
/ 12 марта 2014

Вы можете использовать getBoundingClientRect():

Представьте себе следующий HTML-блок:

<div class="centralizer popup">
    <div class="dragger"></div>
</div>

И стиль:

body {
    background:#ccc;
}
.centralizer {
    position:absolute;
    top:150px;
    left:170px;
    width:352px;
    height:180px;
    overflow:auto;
    -webkit-transform: translateY(-50%) translateX(-50%);
    -moz-transform: translateY(-50%) translateX(-50%);
    -ms-transform: translateY(-50%) translateX(-50%);
    transform: translateY(-50%) translateX(-50%);
}
.popup {
    background:white;
    box-shadow:0 0 0 2px rgba(0, 0, 0, 0.1), 0 0 15px rgba(0, 0, 0, 0.3);
    border-radius:3px;
}
.dragger {
    background:#eee;
    height:35px;
    border-radius:3px 3px 0 0;
    border-bottom:1px solid #ccc;
}

Теперь вы можете использовать следующееJavaScript, чтобы получить правильную позицию:

var popup = document.querySelector('.popup');
var rect = popup.getBoundingClientRect();

console.log("popup.getBoundingClientRect(): \n" + "x: " + rect.left + "\ny: " + rect.top);

Вы можете проверить результат в jsfiddle :

Я тестировал на FF, IE и Chrome, и он работал навсе мои тесты.

22 голосов
/ 12 февраля 2011

Хорошо, держитесь крепче, потому что это нехорошо:

window.addEventListener('load', function(){
  var node = document.getElementById("yourid");
  var curTransform = new   WebKitCSSMatrix(window.getComputedStyle(node).webkitTransform);
  console.log(node.offsetLeft + curTransform.m41); //real offset left
  console.log(node.offsetTop + curTransform.m42); //real offset top
});

Вы можете поиграть с ним здесь:

http://jsfiddle.net/duopixel/wzZ5R/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...