Detlef: Bildschirmkoordinaten eines Objekts speichern

Beitrag lesen

Ich habe von SelfHTML ein Script (Andreas Zierhut: Positionierung von Layern (DHTML) kopiert, was ich für meine Hp nutzen möchte. Dort werden je nach unterschiedlichem Browser (IE / NS) die Bildschirmkoordinaten eines Objekts verschieden gespeichert, um an die Stelle eines relativ positionierten Layers im Dokument anschließend einen absolut positionierten an dieselbe Position zu setzen

var ie = document.all ? true : false;
var ns = document.layers ? true : false;

function ShowNew(){
  if (ie) {
    var derlayer = document.all.DerLayer;
    var anzlayer = document.all.AnzeigeLayer;
    anzlayer.style.posLeft = getLeft(derlayer);
    anzlayer.style.posTop = getTop(derlayer);
    anzlayer.style.visibility = 'visible';
  }
  else if (ns) {
    var derlayer = document.DerLayer;
    var anzlayer = document.AnzeigeLayer;
    anzlayer.pageX = derlayer.pageX;
    anzlayer.pageY = derlayer.pageY;
    anzlayer.visibility = 'show';
  }}
function getLeft(l){
  if (l.offsetParent) return (l.offsetLeft + getLeft(l.offsetParent));
  else return (l.offsetLeft);
}
function getTop(l){
  if (l.offsetParent) return (l.offsetTop + getTop(l.offsetParent));
  else return (l.offsetTop);
}

Ich möchte dies aber lieber mit DOM machen, weil mein NS (7.1) keine layer mehr kennt. Also statt document.all und document.layers lieber document.getElementById.

Mein Script sieht jetzt so aus:

function ShowNew() {
var derlayer = document.getElementById("DerLayer");
var anzlayer = new Array();
anzlayer[0] = document.getElementById("text0");
...
anzlayer[12] = document.getElementById("text12");

for (var i=0;i<=12;i++) {
anzlayer[i].style.posLeft = getLeft(derlayer);
alert(anzlayer[i].style.posLeft);
anzlayer[i].style.posTop = getTop(derlayer);
anzlayer[i].style.width = derlayer.offsetWidth;
}}

function getLeft(l) {
if (l.offsetParent)
return (l.offsetLeft + getLeft(l.offsetParent));
else return (l.offsetLeft);
}

function getTop(l) {
if (l.offsetParent) return (l.offsetTop + getTop(l.offsetParent));
else return (l.offsetTop);
}
Im IE werden die 12 Anzeigebereiche (anzlayer[09]-[12]), die ich im body definiert habe, im Bereich DerLayer an der richtigen Stelle (wie im kopierten Beispiel in einer Tabellenzeile) angezeigt, im NS jedoch oberhalb der Tabelle (die ist 50px unter dem oberen Rand platziert) im body.
Meine Frage nun: Warum macht NS das und wie kann ich das ändern? Im SelfHTML-Forum habe ich dazu keine antwort gefunden.

Detlef