ich habe einen layer der sich frei verschieben lässt. nun möchte ich ihn verschieben und seine position in verschobenem zustand in einem cookie speichern. zuerst muss ich hierfür natürlich die neuen koordinaten bestimmen. aber wie?
beim Document Object Model und bei Microsofts all-Objekt greifst du auf die CSS Style Attribute zu, also layer.style.left und layer.style.top, während es beim Netscape-4-Layer (den du hoffentlich nicht benutzt) einfach layer.left und layer.top heißt.
Das gleiche gilt auch für width und height.
cu
Klaus
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
aber damit kann ich die koordinaten doch nicht dynamisch bestimmen? das objekt ist beim laden der seite ganz oben links. wenn ich es nun mit dem cursor verschirebe ist es meinetwegen irgendwo unten. jetzt muss ich genau diese position bestimmen. ich verzweifele und weiß echt bald nicht mehr weiter.
gruß
stephan
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
aber damit kann ich die koordinaten doch nicht dynamisch
bestimmen? das objekt ist beim laden der seite ganz oben
links. wenn ich es nun mit dem cursor verschirebe ist es
meinetwegen irgendwo unten. jetzt muss ich genau diese
position bestimmen. ich verzweifele und weiß echt bald nicht
mehr weiter.
Doch doch, damit kannst du die Koordinaten dynamisch bestimmen. Du kannst sogar die Werte verändern!
damit gebe ich ja nur die koordinaten an, aber ich muss sie ja iregndwie bestimmen, am besten irgendwo ablesen können. bevor ich sie da angeben kann, muss ich sie ja irgendwie haben. aber wie???
gruß
stephan
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
was willst du eigentlich noch? Ich hab doch geschrieben dass layer.style.left und layer.style.top die aktuellen Werte enthalten. Probiers einfach aus! Es klappt!
cu
Klaus
damit gebe ich ja nur die koordinaten an, aber ich muss sie ja
iregndwie bestimmen, am besten irgendwo ablesen können. bevor
ich sie da angeben kann, muss ich sie ja irgendwie haben. aber
wie???
Ohne die Hochkommatar. Mit - wuerde bedeuten, Du moechtest die Zeichenkette „layer.style.top“ ausgeben, was etwas anderes ist als als der Wert der top-Position des Layers.
Aber auch das wird vermutlich noch nicht funktionieren, denn zu dem Zeitpunkt ist hoechstwahrscheinlich der Layer mit Namen „layer“ entweder noch nicht gesetzt oder im HTML Dokument noch nicht bekannt.
der Name deines Layers ist das was du im id="…" Argument geschrieben hast, das habe ich einfachsheitshalber „layer“ genannt. Wenn dein Layer etwa so aussieht:
Text
Dann heißt dein Layer „Mein_Layer“, also kannst du, wenn du den M$ Internet Explorer verwendest, z.B. mit
document.all.Mein\_Layer.style.top
auf die Eigenschaften zugreifen. Es geht auch:
document.all["Mein\_Layer"].style.top
Wenn du öfter drauf zugreifst, kannst du das ja in einer Variable speichern:
var layer = document.all.Mein\_Layer;
alert(layer.style.left);
Wenn du das modernere Document Object Model (DOM) verwendest (ab IE5, NS6 und dem neuesten Opera-Browser) kannst du
document.getElementById("Mein\_Layer")
verwenden.
cu
Klaus
hallo klaus,
leider bin ich kein sonderlich großer javascript freak und
weiß damit nicht sonderlich viel anzufangen. wie muss das
script aussehen? so?
document.write(„layer.style.top“);
das klappt nicht, da kommt nur statisch layer.style.top
heraus.
ich hab dieses script (siehe unten) und möchte nun das die koordinaten jeweils in einer textbox generiert werden. wenn ich das ganze also nach unten ziehe, soll in der box x=1024 und y=768 stehn. irgendwie kalppt as damit nicht hier das drag script
var ie=document.all
var ns6=document.getElementById&&!document.all
var dragapproved=false
var z,x,y
function move(e){
if (dragapproved){
z.style.left=ns6? temp1+e.clientX-x: temp1+event.clientX-x
z.style.top=ns6? temp2+e.clientY-y : temp2+event.clientY-y
return false
}
}
function drags(e){
if (!ie&&!ns6)
return
var firedobj=ns6? e.target : event.srcElement
var topelement=ns6? „HTML“ : „BODY“
while (firedobj.tagName!=topelement&&firedobj.className!=„drag“){
firedobj=ns6? firedobj.parentNode : firedobj.parentElement
}
if (firedobj.className==„drag“){
dragapproved=true
z=firedobj
temp1=parseInt(z.style.left+230)
temp2=parseInt(z.style.top+0)
x=ns6? e.clientX: event.clientX
y=ns6? e.clientY: event.clientY
document.onmousemove=move
return false
}
}
document.onmousedown=drags
document.onmouseup=new Function(„dragapproved=false“)
//–> This is some text inside a DIV
Nein, wenn dnn muss es heissen:
document.write(layer.style.top);
Ohne die Hochkommatar. Mit - wuerde bedeuten, Du moechtest die
Zeichenkette „layer.style.top“ ausgeben, was etwas anderes ist
als als der Wert der top-Position des Layers.
Aber auch das wird vermutlich noch nicht funktionieren, denn
zu dem Zeitpunkt ist hoechstwahrscheinlich der Layer mit Namen
„layer“ entweder noch nicht gesetzt oder im HTML Dokument noch
nicht bekannt.
wenn ich schon dabei bin kann ich ja auch gleich ne fertige Lösung schreiben:
Du ergänzt deinen Layer mit einem id-Argument:
id="layer\_img"\>
id="layer\_text"\>
This is some text inside a DIV
Ich nehme an es geht dir um das Bild. Dann schreibst du in deinem Script:
\<!--
function printLayerPos()
{
var layer = null;
if (document.getElementById) // DOM
layer = document.getElementById("\<B\>layer\_img\</B\>");
else if (document.all) // Micro$oft IE4
layer = document.all["\<B\>layer\_img\</B\>"];
if (!layer)
return;
// Hier kann die Variable \<B\>layer\</B\> verwendet werden.
// Ein Beispiel für eine Auswertung:
window.alert("Layer ist an Position x="
+ layer.style.left + " y=" + layer.style.top);
}
// --\>
So ungefähr könnte es aussehen. Damit ist auch egal, welchen Browser du verwendest.
cu
Klaus
ich hab dieses script (siehe unten) und möchte nun das die
koordinaten jeweils in einer textbox generiert werden. wenn
ich das ganze also nach unten ziehe, soll in der box x=1024
und y=768 stehn. irgendwie kalppt as damit nicht hier das
drag script
vielen dank, das ist wirklich lieb von euch. aber bei der version von vir2allender tut sich gar nichts mehr, und bei der vrsion von klaus passiert nichts anderes als bei meinem script das ich eben gepostet hab, auch.
die div box bzw. das bild drin konnte man ja schon früher verschieben. es geht mir aber wie gesagt darum, in einer textbox die aktuelle position des layers auszumachen, damit ich diese position in cookies speichern kann. wenn jemand das bild also auf die linke seite zieht, soll es auch da bleiben und nicht beim neu laden wieder oben rechts an der ecke kleben
gruß
stephan
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Es funktioniert wunderbar. Du darfst blos nicht die ganye Sache per Cut&:stuck_out_tongue_winking_eye:aste uebernehmen und zwar aus folgendem Grund: