@ Ответ Тима Дауна бесполезен, если вы отображаете 2000 x 2000 <a>
элементов:
Хорошо, я только что придумал способ. Наложите свою страницу на div, который
охватывает весь документ. Внутри этого создайте (скажем) 2000 х 2000
элементы (чтобы псевдокласс: hover работал в IE 6, см.),
каждый 1 пиксель в размере. Создайте правило CSS: hover для этих элементов
это меняет свойство (скажем, семейство шрифтов). В вашем обработчике нагрузки,
цикл через каждый из 4 миллионов элементов, проверка
currentStyle / getComputedStyle (), пока вы не найдете тот с
наведите шрифт. Экстраполировать обратно из этого элемента, чтобы получить координаты
в документе.
N.B. НЕ ДЕЛАЙТЕ ЭТОГО.
Но вам не нужно отображать 4 миллиона элементов одновременно, вместо этого используйте бинарный поиск. Просто используйте вместо этого 4 <a>
элементов:
- Шаг 1: рассмотреть весь экран как начальную область поиска
- Шаг 2: Разделить область поиска на 2 x 2 = 4 прямоугольника
<a>
элементов
- Шаг 3: Используя функцию
getComputedStyle()
, определите, в каком прямоугольнике мышь зависает
- Шаг 4: уменьшите область поиска до этого прямоугольника и повторите процедуру, начиная с шага 2.
Таким образом, вам нужно будет повторить эти шаги максимум 11 раз, учитывая, что ваш экран не шире, чем 2048 пикселей.
Таким образом, вы получите максимум 11 x 4 = 44 <a>
элементов.
Если вам не нужно точно определять положение мыши с точностью до пикселя, но скажите, что с точностью 10px все в порядке. Вы должны повторить шаги не более 8 раз, поэтому вам нужно нарисовать максимум 8 x 4 = 32 <a>
элементов.
Также создание и последующее уничтожение элементов <a>
не выполняется, так как DOM обычно работает медленно. Вместо этого вы можете просто повторно использовать исходные элементы 4 <a>
и просто настроить их top
, left
, width
и height
при циклическом выполнении шагов.
Теперь создание 4 <a>
также является излишним. Вместо этого вы можете повторно использовать один и тот же элемент <a>
для проверки на getComputedStyle()
в каждом прямоугольнике. Таким образом, вместо того, чтобы разбивать область поиска на 2 x 2 <a>
элемента, просто повторно используйте один элемент <a>
, перемещая его со свойствами стиля top
и left
.
Итак, все, что вам нужно, - это один <a>
элемент, изменив его width
и height
max 11 раз, и измените его top
и left
max 44 раза, и вы получите точное положение мыши.