Hallo an alle Leser,
vorweg möchte ich kurz sagen, dass ich noch nicht sehr fortgeschritten bin mit JavaScript und ich keine fertigen Lösungen erwarte, sondern nur Denkanstöße.
Nun zu meinem hoffentlich kleinen Problem.
Ich habe eine Reihe von Divs (60 Stück) mit 50px*50px. In manchen dieser Divs gibt es Divs mit der Größe von 42px*42px
Mein Ziel ist es, dass ich einen beliebigen Div der Größe 42px*42px in einen anderen 50px *50px ziehen kann. Die Divs haben alle die Postition: Static
Beim Verschieben/Ziehen änder ich die Position dann auf absolute. Das Ziehen/Verschieben funktioniert auch.
Bei der Ablage will ich nun herausfinden, in welchen Div ich den gezogenen Div abgelegt habe.
Probiert habe ich das mit parentNode.id . Dieses liefert mir allerdings nur die ID des "Start"-Divs.
Wie komme ich nun an die Parent-ID des Divs, indas der neue Div hineingezogen wurde.
Hier meine Codeausschitte:
HTML:
|
Source code
|
1
2
3
4
5
6
7
8
9
10
11
12
|
<body onLoad="javascript:init();">
....
{foreach from=$character_inventar item=inv}
{foreach from=$inv item=i}
<div class="character_inventar_slot" id="slot_{$i.slot}">
{if $i.id}
<div class="item" id="item_{$i.id}" onClick="select_click('item_{$i.id}')"></div>
{/if}
</div>
{/foreach}
<div class="cf"></div>
{/foreach}
|
Das HTML ist mit dem Framework Smarty gemacht. Ich lasse da nur Schleifen durchlaufen um ein 10*6 großes Div-Feld aus den 50px*50px Divs aufzubauen.
Die If-Abfrage ist für die vereinzelten kleineren Divs da.
javascript
:
|
Source code
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
var dragobjekt = null;
var dragx = 0;
var dragy = 0;
var posx = 0;
var posy = 0;
function init() {
document.onmousemove = drag;
}
function select_click(id) {
if(dragobjekt == null) {
dragobjekt = document.getElementById(id);
dragx = posx - dragobjekt.offsetLeft;
dragy = posy - dragobjekt.offsetTop;
dragobjekt.style.position = "absolute";
}
else {
dragobjekt.style.position = "static";
alert(dragobjekt.parentNode.id);
dragobjekt=null;
}
}
function drag(ereignis) {
posx = document.all ? window.event.clientX : ereignis.pageX;
posy = document.all ? window.event.clientY : ereignis.pageY;
if(dragobjekt != null) {
dragobjekt.style.left = (posx - dragx) + "px";
dragobjekt.style.top = (posy - dragy) + "px";
}
}
|
Mit den 3 Funktionen bewirke ich die Div-Verschiebung per Maus.
Ob es richtig ist, das Element beim Ablegen wieder auf Position: Static zu setzen weiß ich nicht. Es war im Grunde nur ein Versuch.
CSS:
|
Source code
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
.item {
width:42px;
height:42px;
background-color:red;
}
.character_inventar_slot {
float:left;
padding:4px 4px 4px 4px;
width:42px;
height:42px;
background-image:url('images/inventar_slot_back.gif');
}
|
Ich hoffe Ihr habt mein Anliegen verstanden.
Sollten noch Fragen von eurer Seite aus bestehen, einfach posten