@anndarina
frontend enthusiast

Как передать координаты произвольному элементу на странице?

есть такая разметка:
<div class="container">
  <div class="main">
    <div class="element" data-mini="mini1"></div>
    <div class="element" data-mini="mini2"></div>
    <div class="element" data-mini="mini3"></div>
  </div>
  <div class="side">
    <div class="preview" id="mini1"></div>
    <div class="preview" id="mini2"></div>
    <div class="preview" id="mini3"></div>
  </div>
</div>


блоки element разбросаны по странице. координата top у preview должна совпадать с top у element - то есть они должны находиться на одном уровне.

подскажите, как их можно связать?
  • Вопрос задан
  • 142 просмотра
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
Если чисто "механически" сообщить значение top от одного элемента превью к соответствующему элементу со схожим id = data-mini, то это можно сделать так:
var e_prevs = $('div.side div.preview'); //выбираем все превью-элементы
e_prevs.each(function(index) //пробегаемся по превью элементам
{
   var id = this.id; //this - это текущий элемент превью, получаем его id.
   var link = $('div.main div.element[data-mini=' + id + ']')[0]; //находим элемент-ссылку, у которого есть схожий атрибут data-mini.
   var top_e_prev = this.offsetTop; // получаем знач. свойства от начала страницы
   link.offsetTop = top_e_prev; // присваиваем это значение ссылке
});

Чтобы элементы фактически встали по одной высоте, нужно указать правильные CSS-свойства position опорного контейнера div.container {position: relative;}, а превью-контейнерам давать абсолют, но тут нужно смотреть, как на такие изменения отреагирует весь остальной контент, находящийся в том же контейнере.

PS: Или наоборот передавать свойства...
var main_els = $('div.main div.element');
main_els.each(function (index)
{
   var data_mini = this.dataset.mini;
   var link = $('div.side div.preview#' + data_mini)[0];
   var top_el = this.offsetTop;
   link.offsetTop = top_el;
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы