Schnee rieselt nur im alten IE

M

Merbi

Hallo zusammen,


habe es auf meiner Homepage schneien lassen.
Nur im FF und im IE7 wird nur einmal die Schneegrafik angezeigt oben in der Ecke aber es rieseln nicht mehrere.

Ich versteh es nicht denn das Script sollte eigentlich funktionieren.

Das Script:

Code:
var flocken = 35;
var geschwindigkeit = 2;
var schneeflocke = "templates/images/snow1.gif";
var scrolldown = 100

var schnee = new Array();
var unterer_rand;
var rechter_rand;
var timer;
var x_mv = new Array();
var crds = new Array();
var lftrght = new Array();
var browserinfos = navigator.userAgent;
var ie5 = document.all && document.getElementById && !browserinfos.match(/Opera/);
var ns6 = document.getElementById && !document.all;
var opera = browserinfos.match(/Opera/);
var browserok = ie5 || ns6 || opera;


function zufall(range)
{
        return Math.floor(range * Math.random());
}

function starte_schnee()
{
        if (ie5 || opera)
        {
                unterer_rand = document.body.clientHeight + scrolldown;
                rechter_rand  = document.body.clientWidth - 30; 
        }
        else if (ns6)
        {
                unterer_rand = window.innerHeight + scrolldown;
                rechter_rand  = window.innerWidth - 40;
        }

        for (var i = 0; i <= flocken; i++)
        {
                crds[i] = 0;
                lftrght[i] = Math.random() * 15;
                x_mv[i] = 0.03 + Math.random() / 10;
                schnee[i] = document.getElementById('s' + i);
                schnee[i].sink = geschwindigkeit;
                schnee[i].posx = zufall(rechter_rand);
                schnee[i].posy = zufall(2 * unterer_rand - unterer_rand);
                schnee[i].style.left = schnee[i].posx;
                schnee[i].style.top = schnee[i].posy;
        }

        bewege_schnee();
}

function bewege_schnee()
{
        for (var i = 0; i <= flocken; i++)
        {
                crds[i] += x_mv[i];
                schnee[i].posy += schnee[i].sink;
                schnee[i].style.left = schnee[i].posx + lftrght[i] * Math.sin(crds[i]);
                schnee[i].style.top = schnee[i].posy;

                if ((schnee[i].posy >= (unterer_rand)) || (parseInt(schnee[i].style.left) > (rechter_rand - 3* lftrght[i])))
                {
                schnee[i].posx = zufall(rechter_rand);
                schnee[i].posy = 0;
                }
        }

        var timer = setTimeout('bewege_schnee();', 40); 

        
}

for (var i = 0; i <= flocken; i++)
        document.write('<span id="s' + i +'" style="position: absolute">' + '<IMG SRC="' + schneeflocke + '">' + '</span>');

if (browserok)
        window.onload = starte_schnee;

Wünsche schonmal schöne und erholsame Feiertage und einen guten Rutsch!

Daniel
 
Hi,

also bei mir läuft das genauso wenig wie vorher.

Link

Hatte vorher aber nicht das selbe Script weil in meinem kein Copyright drinne stand.

LG Daniel
 
Ich lasse den Schnee raus.
Ehe ich dann wegen nem anderen Doytype die ganze Seite wieder umändern mussd amit die Valide ist lass ich das lieber.

LG Daniel
 
Das stimmt, lass es einfach so wie es ist dann ham wenigstens ein paar Leute was dabei.

Wünsche dann mal schöne,ruhige Weihnachten und nen guten Rutsch.

Bin ab morgen Früh erstmal im Urlaub. (Da hab ich genug Schnee):)

LG Daniel
 
Hi,

viel Spass im Urlaub! Damit es auch danach schneereiche Tage gibt, einige kleine Anpassungen fürs Script.

1. Du rufst bereits Funktionen im onload-Event auf - allerdings im body-Tag. Das Script startet will sich ebenfalls im onload-Event starten, wird aber vom späteren "bodyonload" überschrieben.

Lösung:
Entferne folgende Zeilen aus dem Script (auskommentieren reicht auch)
Code:
if (browserok)
  window.onload = initsnow;
und ergänze den onload-Event im body-Tag
Code:
<body onload="nav_init(); initPage(); if(browserok){ initsnow();}" onunload="stopScrolling()">

2. Das Script verweigert seine Arbeit im Firefox, da die Einheiten (Pixel) bei der Zuweisung der Positionen an die Schneeflocken fehlt. An zwei Stellen müssen diese ergänzt werden.

In der Funktion initsnow
Code:
snow[i].style.left = snow[i].posx + "px";
snow[i].style.top = snow[i].posy + "px";
und in mousenow
Code:
snow[i].style.left = (snow[i].posx + lftrght[i] * Math.sin(crds[i])) + "px";
snow[i].style.top = snow[i].posy + "px";
So sollte einem schneereichen Winter nichts mehr im Weg stehen.

Ciao
Quaese
 
Zurück