2016-05-24 12 views
0

Wie kann ich ändern, so dass y auf Null gesetzt ist?
Wie erhält man die Elementposition relativ zum übergeordneten Element?

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; 
} 

Ich habe "Position" auf "Offset" zu ändern, und ich habe versucht, die CSS-Position zu ändern. Aber ich kann nicht herausfinden, wie man y bekommt, um Top von seinem Elternteil zu zählen.

Antwort

1

Nehmen Sie die x- und y-Position des Containers und ziehen Sie diese Werte von den entsprechenden Werten ab.

jsFiddle.

Alternativ geben Sie die position: absolute des ziehbaren Elements und die übergeordnete position: relative.

jsFiddle.

+0

Danke. Ich kann Mathe nicht benutzen, um die Position zu bekommen. Aber Eltern zu relativ zu ändern, war was ich suchte! –

+0

@Mjukis Haben Sie keine Angst vor etwas Mathe: D – alex

+0

Es ist kompliziert, weil mein reales Projekt divs verschachtelt hat .. so wird Mathe sehr komplex sein ...: D –

0

Sie können offset() für die Eltern verwenden und es von dem Kind wie folgt abziehen:

$('#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>

+0

Sie müssen den 'x' Wert berücksichtigen, Sonst in dem Beispiel Code mit Padding ist hart gegen die Kante mit einem Wert von "7" für die "x". – alex

+1

Hinzugefügt x für das Beispiel;) – Patrick2607

Verwandte Themen