Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.12.2016, 21:14
Интересующийся
Отправить личное сообщение для CarterSS Посмотреть профиль Найти все сообщения от CarterSS
 
Регистрация: 07.12.2016
Сообщений: 10

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" обернуть в еще один блок, то все работает.
Как правильно организовать структуру блоков?
Ответить с цитированием
  #2 (permalink)  
Старый 08.12.2016, 00:15
Аватар для Coriolan161
Профессор
Отправить личное сообщение для Coriolan161 Посмотреть профиль Найти все сообщения от Coriolan161
 
Регистрация: 21.11.2015
Сообщений: 440

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

2) А нельзя написать функцию которая принимает элемент и прводит манипуляции со style и вызвать её для ui и controls?
Ответить с цитированием
  #3 (permalink)  
Старый 08.12.2016, 08:19
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от CarterSS
когда меняем положение или размер блока "controls", то и блок "ui" повторял эти же действия
Зачем тогда таскать дочерние элементы? Таскай родителя, а там и дети подтянутся...
Ответить с цитированием
  #4 (permalink)  
Старый 08.12.2016, 10:05
Интересующийся
Отправить личное сообщение для CarterSS Посмотреть профиль Найти все сообщения от CarterSS
 
Регистрация: 07.12.2016
Сообщений: 10

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

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

Последний раз редактировалось CarterSS, 08.12.2016 в 10:13.
Ответить с цитированием
  #5 (permalink)  
Старый 08.12.2016, 10:24
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от CarterSS
Суть в том, что родитель и дочерний элемент "controls" не всегда нужны, после перетаскивания я уберу их и как тогда изменится положение "ui"?
Можно не убирать, а просто спрятать...
Сообщение от CarterSS
как бы Вы организовали такую задачу, когда два дочерних элемента свободно перемещаются по родителю, но при этом не перемещать родителя
Так они у тебя должны перемещаться "синхронно".
Самый простой вариант - поместить перемещаемые элементы в один контейнер и таскать уже его.
Ответить с цитированием
  #6 (permalink)  
Старый 08.12.2016, 11:00
Интересующийся
Отправить личное сообщение для CarterSS Посмотреть профиль Найти все сообщения от CarterSS
 
Регистрация: 07.12.2016
Сообщений: 10

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

Последний раз редактировалось CarterSS, 08.12.2016 в 11:21.
Ответить с цитированием
  #7 (permalink)  
Старый 08.12.2016, 13:53
Аватар для Coriolan161
Профессор
Отправить личное сообщение для Coriolan161 Посмотреть профиль Найти все сообщения от Coriolan161
 
Регистрация: 21.11.2015
Сообщений: 440

CarterSS,
Давай все что есть
Ответить с цитированием
  #8 (permalink)  
Старый 08.12.2016, 14:02
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

CarterSS,
Судя по фрагменту html, у вас на разных элементах одинаковые id.
В таком случае поведение элементов непредсказуемо.
Ответить с цитированием
  #9 (permalink)  
Старый 08.12.2016, 14:14
Интересующийся
Отправить личное сообщение для CarterSS Посмотреть профиль Найти все сообщения от CarterSS
 
Регистрация: 07.12.2016
Сообщений: 10

Сообщение от 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 работает.

Последний раз редактировалось CarterSS, 08.12.2016 в 14:34.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обработчик событий для динамически добавленных элементов Tecvid Events/DOM/Window 28 25.06.2018 13:49
Подскажите ка вычислить координаты мыши над конкретным элементом div? shurik_shink Events/DOM/Window 1 28.03.2016 15:45
Определение положения элемента над другим tarya jQuery 1 19.07.2015 11:24
mousemove div над img diprom Events/DOM/Window 0 27.06.2014 22:01
Как добавлять div над div'ом? Johnlion Angular.js 3 23.06.2014 13:44