Ebene verschieben
Bernd
- javascript
0 wahsaga
Auf der Seite: http://www.smashbach.de/carisma/huber.htm ist eine Ebene die durch die zwei Links unten bewegt werden kann.
Leider funktioniert dieses Springen der Ebene nur im IE und im Opera. Im Mozilla, Firbird, Netscape und auch dem IE (MAC) funktioniert das Script nicht.
Kann mal jemand schauen und vielleicht auch eine Verbesserung machen?
Woran kann das liegen das manche Browser das Script nicht ausführen obwohl "JavaScript" eingeschaltet ist?
Vielen Dank...
hi,
Auf der Seite: http://www.smashbach.de/carisma/huber.htm ist eine Ebene die durch die zwei Links unten bewegt werden kann.
Leider funktioniert dieses Springen der Ebene nur im IE und im Opera. Im Mozilla, Firbird, Netscape und auch dem IE (MAC) funktioniert das Script nicht.
dann werden diese browser doch sicher eine fehlermeldung bringen ...?
Kann mal jemand schauen und vielleicht auch eine Verbesserung machen?
ja, du :-)
Woran kann das liegen das manche Browser das Script nicht ausführen obwohl "JavaScript" eingeschaltet ist?
nicht alle browser interpretieren javascript gleich, und gleich gut.
um das browserübergreifend zum funktionieren zu bekommen, muss man manchmal ein wenig "tricksen".
gruss,
wahsaga
dann werden diese browser doch sicher eine fehlermeldung bringen ...?
Nö, es funktioniert nur nicht.
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