True / False / Cookies - fungerer ikke ordentligt!
Hej EksperterJeg har følgende JavaScript til at lave "snevejr":
/******************************************
* Snow Effect Script- By Altan d.o.o. (snow@altan.hr, http://www.altan.hr/snow/index.html)
* Visit Dynamic Drive (http://www.dynamicdrive.com/) for full source code
* Modified Dec 31st, 02' by DD. This notice must stay intact for use
******************************************/
function GetCookie(name) {
var namestr = name + "=";
var namelen = namestr.length;
var cooklen = document.cookie.length;
var i = 0;
while (i < cooklen) {
var j = i + namelen;
if (document.cookie.substring(i, j) == namestr) {
endstr = document.cookie.indexOf (";", j);
if (endstr == -1) {
endstr = document.cookie.length;
}
return Boolean(unescape(document.cookie.substring(j,endstr)));
}
i = document.cookie.indexOf(" ", i) + 1;
if (i == 0) break;
}
return true;
}
function snowStart() {
if(snow_on && ie4up) {
document.images['snow_on'].style.visibility = 'hidden';
document.images['snow_off'].style.visibility = 'visible';
var expdate = new Date ();
expdate.setTime(expdate.getTime() + (7 * 24 * 60 * 60 * 1000 * 365));
document.cookie = "snowenabled=" + snow_on + "; expires=" + expdate.toGMTString();
snow_on = !snow_on;
for (i = 0; i < no; ++ i) {
document.all['dot'+i].style.visibility = 'visible';
}
snowIE();
}
else {
document.images['snow_on'].style.visibility = 'visible';
document.images['snow_off'].style.visibility = 'hidden';
}
}
function snowStop(){
if(!snow_on && ie4up) {
document.images['snow_on'].style.visibility = 'visible';
document.images['snow_off'].style.visibility = 'hidden';
var expdate = new Date ();
expdate.setTime(expdate.getTime() + (7 * 24 * 60 * 60 * 1000 * 365));
document.cookie = "snowenabled=" + snow_on + "; expires=" + expdate.toGMTString();
for (i = 0; i < no; ++ i) {
document.all['dot'+i].style.visibility = 'hidden';
}
snow_on = !snow_on;
}
else {
document.images['snow_on'].style.visibility = 'hidden';
document.images['snow_off'].style.visibility = 'visible';
}
}
function snowIE() { // IE main animation function
if (!snow_on) {
for (i = 0; i < no; ++ i) { // iterate for every dot
yp[i] += sty[i];
if (yp[i] > doc_height-50) {
xp[i] = Math.random()*(doc_width-am[i]-30);
yp[i] = 0;
stx[i] = 0.02 + Math.random()/10;
sty[i] = 0.7 + Math.random();
doc_width = document.body.clientWidth;
doc_height = document.body.clientHeight;
}
dx[i] += stx[i];
document.all["dot"+i].style.pixelTop = yp[i];
document.all["dot"+i].style.pixelLeft = xp[i] + am[i]*Math.sin(dx[i]);
}
setTimeout("snowIE()", 5);
}
}
var ie4up = (document.all) ? true : false;
var snow_on = GetCookie("snowenabled") || true;
if (ie4up) {
//Configure below to change URL path to the snow image
var snowsrc="snow.gif";
// Configure below to change number of snow to render
var no = 20;
var dx, xp, yp; // coordinate and position variables
var am, stx, sty; // amplitude and step variables
var i;
doc_width = document.body.clientWidth;
doc_height = document.body.clientHeight;
dx = new Array();
xp = new Array();
yp = new Array();
am = new Array();
stx = new Array();
sty = new Array();
for (i = 0; i < no; ++ i) {
dx[i] = 0; // set coordinate variables
xp[i] = Math.random()*(doc_width-50); // set position variables
yp[i] = Math.random()*doc_height;
am[i] = Math.random()*20; // set amplitude variables
stx[i] = 0.02 + Math.random()/10; // set step variables
sty[i] = 0.7 + Math.random(); // set step variables
document.write("<div id=\"dot"+ i +"\" style=\"POSITION: absolute; Z-INDEX: "+ i +"; VISIBILITY: hidden; TOP: 15px; LEFT: 15px;\"><img src='"+snowsrc+"' border=\"0\"><\/div>");
}
}
Kombineret med følgende html-kode:
<body onload="snowStart();">
<script src="snow.js" language="javascript" type="text/javascript"></script>
<img id="snow_on" src="snow_on.gif" alt="Start snevejret" onclick="snowStart();" /><img id="snow_off" src="snow_off.gif" alt="Stop snevejret" onclick="snowStop();" />
Ideen er at man skal kunne slå snevejret til eller fra og indstillingen skal kunne huskes på tværs af flere sider - men det fungerer ikke og jeg fatter absolut ikke hvorfor!
Problemet er vistnok evalueringen af true/false i snowStart() og snowStop() funktionerne - det fungerer vist ikke helt som jeg forventer!
Jeg er mega-dårlig til at lave fejlsøgning i javascripts, så jeg har ikke været i stand til at finde fejlen - håber I kan hjælpe!
Mvh Tipsen
