Uschi Renziehausen: Ebene verschieben

Beitrag lesen

Gugugg :-))

dann werden diese browser doch sicher eine fehlermeldung bringen ...?
Nö, es funktioniert nur nicht.

Doch doch, das Script funktioniert auch unter Mozilla, nur sieht man eben nix, weil er anders kalkuliert. Siehe unten. Erstmal gehört zu Angaben wie style.left eine Maßangabe:
  obj.style.left=(lpos-schritt) +'px';
                                ^^^^^
Wir haben ein DIV mit der id "foto", dass vom linken Rand 39px entfernt sind. In diesem DIV befinden sich 7 Bildlein, die alle 390px breit sind. Insgesamt hat das foto-DIV für IE und Opera deshalb eine Breite von 2854 Pixeln. Anders für Mozilein; der sagt sich: ich habe insgesamt im Body Platz für sagen wir 1280px. Darin soll ich nun ein schrecklich breites DIV mit left 39px anzeigen. Wieviel Platz habe ich noch?
maxpos = 1280-39 = 1261px;
Nun soll am Anfang nach rechts verschoben werden, und zwar unter folgenden Bedingungen:
Wenn
 LinkePosition(ausgangswert=39)-schritt(390) <= BreiteDesBilderDivs(1241)-BodyBreite(1280)
   verschiebe nach BreiteDesBilderDivs(1241)-BodyBreite(1280) * - 1, also auf 39

Da wir da schon vorher waren, sieht man nix.

Damit es funktioniert, muss man also die Breite des DIVs für Mozi berechnen, indem man durch die Enkelkinder des Fotodivs schleift.

<div id="fotos"><nobr><img 1 /><img 2 ></nobr></div>
Anbei die umgebastelte Funktion. Das Zeugs für Netscape 4.x habe ich rausgeschmissen.

<script language="JavaScript" type="text/javascript">
var schritt=390;

function sprung(richtung) {
 if(document.layers) return;

var obj=document.getElementById('fotos');
 var lpos=parseInt(obj.offsetLeft);
 var sw=parseInt(document.getElementsByTagName('body')[0].offsetWidth);

if(richtung<1) { // wenn nach links verschoben werden soll
  if(lpos<0) {
   if(lpos+schritt>0) {
    obj.style.left=0
   } else {
    obj.style.left=lpos+schritt +'px';
   }
  }
 } else { // wenn nach rechts verschoben werden soll
 var maxpos=parseInt(obj.offsetWidth);
   if(document.all) {
    var maxpos=parseInt(obj.offsetWidth);
   } else { // der Mozi-Zweig
    var maxpos = 0;
    for(var i=0; i<obj.firstChild.childNodes.length; i++) {
     if(obj.firstChild.childNodes[i].nodeName == 'IMG') {
      maxpos += parseInt(obj.firstChild.childNodes[i].offsetWidth);
     }
    }
   }
   if((lpos-schritt) <= (maxpos-sw)*-1) {
    obj.style.left = ((maxpos-sw)*-1) +'px';

} else {
    obj.style.left = (lpos-schritt) +'px';
   }
 }

/*var testausgabe = "maxpos: " +maxpos +"<br />";
 testausgabe += "sw: " +sw +"<br />";
 testausgabe += "lpos: " +lpos +"<br />";
 //alert(lpos-schritt);
 testausgabe += "lpos-schritt: " +(lpos-schritt) +"<br />";
 testausgabe += "(maxpos-sw): " +(maxpos-sw);
 document.getElementById('test').innerHTML = testausgabe; */
}

</script>

Gruß, Uschi