2015-09-08 4 views
-1

Чтобы определить маржу страницы в разных положениях страницы, мне нужно получить смещение, ширину и высоту каждого элемента DOM.получить смещение каждого элемента DOM эффективно

Я повторяю элементы DOM и сохраняю атрибуты каждого элемента. Я пробовал его с помощью JQuery $(el).offset(), но это было очень медленно. Я предполагаю, что создание объекта JQuery для каждого элемента с помощью $(...) происходит очень медленно.

Затем я попробовал старую реализацию, которую я получил из старого кода, который использует родной JS, и это было в 4 раза быстрее.

ТАК, что я действительно спрашиваю, есть ли другой способ сделать это? Я должен упомянуть, что мой скрипт работает на сайтах издателей, и я ничего не знаю о странице, на которой я работаю.

+0

простой ванильный js и разумный алгоритм. возможно, вы должны кэшировать некоторые смещения, зависит от того, что вы делаете. – citykid

+0

Да, я также думаю, что просто хочу убедиться, что я не пропущу ни малейшего трюка, ни чего-то лучшего/сортировщика/более эффективного. – mrgoos

ответ

0

Я думаю, это одно решение, используя map() и getBoundingClientRect():

var elements = document.getElementsByClassName('someclass'); 

elements.map(function(val, i, arr) { 

    var doc = document.getBoundingClientRect(), 
     el = val.getBoundingClientRect(), 
     coordsX = el.left - doc.left, 
     coordsY = el.top - doc.top; 

    return {x: coordsX, y: coordsY}; 
}); 

Это возвращает массив всех координат данного класса. Вы можете изменить document.getElementsByClassName на querySelector, если он лучше подходит вашим потребностям.

Это также изменит getBoundingClientRect() как относительно документа вместо видового экрана.

+0

getBoundingClientRect относительно окна просмотра, мне нужно, чтобы он был относительно документа. И мне нужно перебрать document.body. – mrgoos

+0

@mrgoos Я обновлю свой ответ, держись. – Chrillewoodz

+0

@mrgoos Обновленный ответ. – Chrillewoodz

Смежные вопросы