Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Div над другим блоком (https://javascript.ru/forum/dom-window/66311-div-nad-drugim-blokom.html)

CarterSS 07.12.2016 21:14

Div над другим блоком
 
Имеется несколько блоков:

<div id="container" style="position: absolute;">
             <div id="ui" style="width:150px;height:50px; position: absolute; background:red"> </div>
             <div id="controls" style="width: 150px; height: 50px;"></div>
       </div>

Суть задачи в том, что когда меняем положение или размер блока "controls", то и блок "ui" повторял эти же действия.
Примерный код js для изменения положения блоков:
controls.style.top = e.pageY +'px' ;
    controls.style.left = e.pageX+ 'px';     
    ui.style.top = controls.style.top;
    ui.style.left = controls.style.left;

но блок "ui" не двигается. В чем подвох не понимаю, но если "controls" обернуть в еще один блок, то все работает.
Как правильно организовать структуру блоков?

Coriolan161 08.12.2016 00:15

CarterSS,
1) У тебя задан position: absolute для ui? Если нет, то он тебя будет в рутСкоуп посылать с твоими top и left

2) А нельзя написать функцию которая принимает элемент и прводит манипуляции со style и вызвать её для ui и controls?

ksa 08.12.2016 08:19

Цитата:

Сообщение от CarterSS
когда меняем положение или размер блока "controls", то и блок "ui" повторял эти же действия

Зачем тогда таскать дочерние элементы? Таскай родителя, а там и дети подтянутся...

CarterSS 08.12.2016 10:05

Суть в том, что родитель и дочерний элемент "controls" не всегда нужны, после перетаскивания я уберу их и как тогда изменится положение "ui"?

Подскажите, как бы Вы организовали такую задачу, когда два дочерних элемента свободно перемещаются по родителю, но при этом не перемещать родителя.

ksa 08.12.2016 10:24

Цитата:

Сообщение от CarterSS
Суть в том, что родитель и дочерний элемент "controls" не всегда нужны, после перетаскивания я уберу их и как тогда изменится положение "ui"?

Можно не убирать, а просто спрятать...
Цитата:

Сообщение от CarterSS
как бы Вы организовали такую задачу, когда два дочерних элемента свободно перемещаются по родителю, но при этом не перемещать родителя

Так они у тебя должны перемещаться "синхронно". :)
Самый простой вариант - поместить перемещаемые элементы в один контейнер и таскать уже его.

CarterSS 08.12.2016 11:00

Тогда скажите, в чем проблема в данном случае, когда один элемент меняет положение, а второй на остается на месте, хотя оба позиционированы абсолютно и обоим одновременно меняю top/left?
Вот пример поведения, не понимаю, относительно чего позиционируется "ui" :

Coriolan161 08.12.2016 13:53

CarterSS,
Давай все что есть

Dilettante_Pro 08.12.2016 14:02

CarterSS,
Судя по фрагменту html, у вас на разных элементах одинаковые id.
В таком случае поведение элементов непредсказуемо.

CarterSS 08.12.2016 14:14

Цитата:

Сообщение от Dilettante_Pro
Судя по фрагменту html, у вас на разных элементах одинаковые id.
В таком случае поведение элементов непредсказуемо.

Это просто запись в логе, объекта всего два.

Нашел причину поведения: ui.style.property перестает работать после того, как добавляю элемент "controls", а делаю это следующим образом:

var ui = document.getElementById('ui');
    var container = ui.parentNode; 
    markup = '<div class="ft-controls"><div>';
    container.innerHTML = container.innerHTML + markup;  
    controls = container.getElementsByClassName('ft-controls');


Исправил кривизну

markup = '<div class="ft-controls"><div>';
    container.innerHTML = container.innerHTML + markup;

на

controls = document.createElement('div');
    controls.className = 'ft-controls';  
    container.appendChild(controls);


Теперь ui.style.property работает.


Часовой пояс GMT +3, время: 00:46.