Позиционирование перетаскиваемого объекта в центре родительского объекта

#javascript #jquery #css #jquery-ui

#javascript #jquery #css #jquery-пользовательский интерфейс

Вопрос:

Я хочу разместить перетаскиваемый элемент в родительском центре divs. Смотрите пример здесь

 $("#mover").draggable({
    revert: true,
    containment: "parent"
});

<div style="width: 100px; height: 100px;" id="joystick">
    <div style="width: 10px; height: 10px" id="mover"></div><br />
</div>
  

Теперь это работает нормально, но как только я хочу расположить объект mover в joystick центре, перетаскивание выполняется не так, как я хочу.

Я попытался расположить его, указав mover a margin: 45px 0 0 45px; , но затем (из-за того, что модель box видит поле как часть поля) перетаскивание по-прежнему работает только вниз и вправо, а не вверх и влево.

Как вы видите, я хочу создать что-то вроде «джойстика», используемого для управления чем-либо. Следовательно, он должен быть центрирован, но также быть подвижным по всем осям».

Любые идеи будут высоко оценены.

Ответ №1:

Вот полная рабочая демонстрация, вы должны расположить центр джойстика с помощью position:relative; : http://jsfiddle.net/E6BQe /

HTML:

 <div id="coords">amp;nbsp;</div>
<div id="joystick">
    <div id="mover"></div>
</div>
  

CSS:

 #joystick { background-color:whitesmoke; width: 100px; height: 100px; padding:0px; }
#mover { background-color:red; position:relative; margin:0px; padding:0px; width: 10px; height: 10px; left:45px; top:45px; }
  

javascript:

 $("#mover").draggable({
    revert: true,
    containment: "parent",
    create: function(){
        $(this).data("startLeft",parseInt($(this).css("left")));
        $(this).data("startTop",parseInt($(this).css("top")));
    },
    drag: function(event,ui){
        var rel_left = ui.position.left - parseInt($(this).data("startLeft"));
        var rel_top = ui.position.top - parseInt($(this).data("startTop"));
        $('#coords').text(rel_left   ", "   rel_top);
    },
    stop: function(){
        $('#coords').html("amp;nbsp;");
    }
});
  

Ответ №2:

Добавьте следующий CSS:

 #joystick {position:relative}
#mover {position:absolute;top:45px;left:45px}
  

Рабочий пример: http://jsfiddle.net/52V6h /

Разница между этим и margin заключается в том, что это просто устанавливает позицию, сохраняя при этом контейнеры неизменными. Изменение поля заставит #mover всегда находиться на расстоянии 45 пикселей от угла поля.