Как правильно получить ограничивающую рамку для элементов HTML относительно окна? - PullRequest
7 голосов
/ 17 июля 2010

Я пишу расширение Firefox. Я пытаюсь ограничить его только XUL + Javascript (без XPCOM). Когда я получаю событие mouseover для элемента HTML, мне нужно получить его ограничительную рамку в системе координат Windows (это встроенный документ XUL browser.xul).

Очевидное место для начала - поместить что-то вроде этого в обработчик события mouseover:

var rect = e.target.getBoundingClientRect();

Это здорово, но это дает мне прямоугольник в системе координат документа HTML, который относится к верхнему левому углу области рисования HTML. Я хочу отобразить элемент xul: panel с помощью panel.openPopup () рядом с этим изображением (но не используя одно из предопределенных положений всплывающих окон ), поэтому мне нужно перевести координаты.

Я попытался сделать следующее (в XUL dom), чтобы получить смещения для перевода, и он работает для некоторых сайтов, но не для всех, и, похоже, не учитывает перевод x, необходимый для боковые панели.

var appcontent = document.getElementById("appcontent");
if (appcontent) {
  chromeOffsetX = r.left;
  chromeOffsetY = r.top;
}

Итак, как лучше всего подойти к этому?

Примечание : для расширений IE я бы использовал (и использовал) IDisplayServices :: TransformRect () - есть ли что-то похожее для Firefox?

Теперь с наградой!

Ответы [ 2 ]

0 голосов
/ 23 июля 2010

Оказывается, получение местоположения не имеет значения, потому что вы можете расположить элементы относительно элемента, используя что-то вроде:

hoverPanel.openPopup(someElement, "overlap", offsetX, offsetY, false, false);
0 голосов
/ 23 июля 2010

Этот вопрос содержит код, который определяет x и y элемента относительно видимого окна. Не уверен, что ответит на ваш вопрос.

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