如何获取相对于父级的元素位置?

时间:2016-05-24 10:02:02

标签: javascript jquery css

如何更改,以便将y设置为零?

FIDDLE
http://jsfiddle.net/DGbT3/2672/

HTML

<div id="parent" style="width: 300px; height: 300px; border: 1px solid black; margin-top: 50px;">
  <div id="dragThis">
    <ul>
      <li id="posX"></li>
      <li id="posY"></li>
    </ul>
  </div>
</div>

JS

$('#dragThis').draggable({
  drag: function() {
    var position = $(this).position();
    var xPos = position.left;
    var yPos = position.top;
    $('#posX').text('x: ' + xPos);
    $('#posY').text('y: ' + yPos);
  }
});

CSS

#dragThis {
  width: 6em;
  height: 6em;
  padding: 0.5em;
  border: 3px solid #ccc;
  border-radius: 0 1em 1em 1em;
  position: relative;
  top: 0px;
}

我一直在将“位置”改为“偏移”,我试图改变CSS的位置。但我无法弄明白,如何得到y,从其父母那里算上数。

2 个答案:

答案 0 :(得分:1)

获取其容器的x和y位置,并从适当的值中扣除这些值。

jsFiddle

或者,给予可拖动元素position: absolute和父position: relative

jsFiddle

答案 1 :(得分:0)

您可以将offset()用于父级,并将其从子级中删除,如下所示:

$('#dragThis').draggable({
  drag: function() {
    var position = $(this).position();
    var xPos = position.left;
    var yPos = position.top;
    var xPosParent = $('#parent').offset().left;
    var yPosParent = $('#parent').offset().top;
    $('#posX').text('x: ' + (xPos - xPosParent));
    $('#posY').text('y: ' + (yPos - yPosParent));
  }
});
    #dragThis {
      width: 6em;
      height: 6em;
      padding: 0.5em;
      border: 3px solid #ccc;
      border-radius: 0 1em 1em 1em;
      position: relative;
      top: 0px;
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.8.23/jquery-ui.min.js"></script>
<div id="parent" style="width: 300px; height: 300px; border: 1px solid black; margin-top: 50px;">
  <div id="dragThis">
    <ul>
      <li id="posX"></li>
      <li id="posY"></li>
    </ul>
  </div>
</div>