Как получить позицию html-тега на экране?

Возможный дубликат:
Экранные координаты элемента , через Javascript

Итак, что мне нужно, просто - узнать, где на экране пользователя (НЕ в окне браузера) находится верхний левый угол элемента?


person Rella    schedule 04.12.2010    source источник
comment
...и если вы сможете получить эту информацию... что вы собираетесь с ней делать?   -  person Karl Knechtel    schedule 04.12.2010


Ответы (3)


На экране пользователя? Вы не можете этого сделать. Я уверен, что вы могли бы написать что-то подобное с помощью апплета Java или подобного, но не с помощью JavaScript.

Самое близкое, что вы можете получить, это получить положение окна браузера, используя свойства window.screenX и window.screenY в IE, и свойства window.screenLeft и т. д. в других браузерах, а затем получить относительное смещение элемента, используя метод описано здесь (из ответа Бризера) и суммирует координаты. К сожалению, это не относится к панелям инструментов или боковым панелям в браузере, так что это действительно приблизительная оценка. Не делайте этого, если вам нужна 100% точность.

person Sasha Chedygov    schedule 04.12.2010
comment
На самом деле, вы можете. Смотрите ответ Бризера. - person El Yobo; 04.12.2010
comment
@El Yobo: Он сказал, что это экран пользователя, а НЕ окно браузера. Если я не правильно понимаю вопрос, вы не можете определить положение окна браузера на экране с помощью JavaScript, поэтому вы не можете этого сделать. - person Sasha Chedygov; 04.12.2010
comment
@ElYobo - этот ответ неверен, перечитайте вопрос - этот правильный. - person Nick Craver; 04.12.2010
comment
Если бы вы не могли, как бы это работало? - person Félix Saparelli; 04.12.2010
comment
Я думаю, что вы можете, например, window.screen.top дает смещение верхнего края клиентской области. - person Paul Dixon; 04.12.2010
comment
@Ник, спасибо, ты прав, я неправильно прочитал вопрос. К сожалению, SO не позволит мне изменить мой неправильный отрицательный голос, если вопрос не будет отредактирован ... @musicfreak, пожалуйста, внесите незначительные изменения в свой ответ, чтобы я мог отменить свой голос. - person El Yobo; 04.12.2010
comment
@Paul Dixon: Хм, Chrome говорит, что это не определено. @passcod: я не уверен, на самом деле, хороший вопрос. Хотя я совершенно уверен, что это как-то связано с тем, что он создает свои собственные окна, над которыми у JavaScript больше контроля. @El Yobo: я отредактировал, спасибо. :) - person Sasha Chedygov; 04.12.2010
comment
@Paul - это не работает в разных браузерах, например, в Chrome прямо сейчас window.screen.top равно undefined... @musicfreak правильно в том смысле, что вы не можете этого сделать. Тот факт, что люди голосуют против ответа, означает, что они вообще не читали вопрос или голосуют против, потому что предполагают, что вы можете это сделать, но не знают, как (почему не они опубликовали ответ?)... в любом случае они ошибаются. - person Nick Craver; 04.12.2010
comment
@Paul - похоже, есть проблемы с переносимостью, см. w3schools.com/jsref/prop_win_screenleft. жерех - person El Yobo; 04.12.2010
comment
Это интересный вопрос, я копаюсь, но прихожу к тому же выводу. Кажется возможным с Firefox, но сделать что-то портативное выглядит... сложно :) - person Paul Dixon; 04.12.2010
comment
На самом деле, для ясности, это FF3.6 — именно это свойство выглядит многообещающим: developer .mozilla.org/en/DOM/window.mozInnerScreenX - person Paul Dixon; 04.12.2010

если вы используете jquery, вы можете использовать http://api.jquery.com/position/ иначе вы необходимо использовать смещение. Подробнее об этом читайте здесь http://www.quirksmode.org/js/findpos.html

person Breezer    schedule 04.12.2010
comment
Это находит его в окне браузера, а не на экране ... явно то, что вопрос не задавал, чтобы найти. - person Nick Craver; 04.12.2010
comment
Если вы знаете позицию в окне, вы можете получить смещение окна из window.screen, верно? - person Paul Dixon; 04.12.2010
comment
@Paul - Нет, даже тогда вы не знаете размер панели инструментов и т. Д., И вы не можете получить позицию для начала. - person Nick Craver; 04.12.2010
comment
Но объединив это с window.screenX и window.screenY, он должен получить то, что ему нужно. - person AlfonsoML; 04.12.2010
comment
@AlfonsoML - это дает верхний левый угол всего окна, а не область страницы, что означает, что вам все равно нужно учитывать высоту инструмента и т. д., которые вы не знаете. - person Nick Craver; 04.12.2010
comment
Действительно, см. stackoverflow .com/questions/504052/ - person Paul Dixon; 04.12.2010

Кажется, что это все-таки возможно; см. этот элемент w3schools (IE) и этот другой элемент w3schools (Chrome и FF). Однако я не проверял это на себе.

В браузерах кроме Chrome и FF используйте window.screenLeft и window.screenTop. В Chrome и FF используйте window.screenX и window.screenY (я тестировал это в Chrome, там это работает).

person El Yobo    schedule 04.12.2010
comment
Ваша ссылка ясно показывает, что это не работает в Chrome или Firefox. Во-вторых, это неправильно, опять же это дает окну (всему окну, а не области страницы) верхний левый угол - вы все еще не знаете, как далеко от него и области страницы. - person Nick Craver; 04.12.2010
comment
@Ник - у меня есть две ссылки. В первом также указано, какие значения использовать для FF и Chrome. - person El Yobo; 04.12.2010
comment
@ElYobo - Пожалуйста, посмотрите мои комментарии к другому ответу, это неверно. Не мой отрицательный голос ... но это уже обсуждалось в комментариях к вопросу :) - person Nick Craver; 04.12.2010
comment
@Ник, да, ты снова прав, не подумал о других битах внутри экрана. Я упоминал о проблемах с переносимостью в комментариях выше, но там не было материала Chrome + FF, и я думал, что этого достаточно… к сожалению, это не так. - person El Yobo; 04.12.2010
comment
Хотя, если бы кто-то открыл окно с помощью javascript и предотвратил любые украшения окна, этого было бы достаточно для этого окна, да? - person El Yobo; 04.12.2010
comment
@Эль Йобо: Не совсем так. Что насчет строки заголовка? А некоторые браузеры (Firefox) позволяют переопределить отключение оформления окон, так что в этих случаях это тоже не сработает. Как было сказано несколько раз, вы можете получить довольно точное предположение, но вы никогда не сможете быть точным в этом вопросе. - person Sasha Chedygov; 06.12.2010
comment
Ну, это похоже; рад видеть, что ваш правильный ответ в конечном итоге всплыл наверх :) - person El Yobo; 06.12.2010