Annonceindlæg fra Infor
04. januar 2006 - 21:03
#3
Det er disse to funktioner som laver den effekt: function actFloatLayer(slideTime,layer_top,layer_height,browser) // modded by Jere Tiihonen { switch(browser) { case (1): //find = document.body.clientHeight; find = (document.compatMode=="CSS1Compat")?document.documentElement.clientHeight:document.body.clientHeight; current = menu_base.style.pixelTop; scrollAt = (document.compatMode=="CSS1Compat")?document.documentElement.scrollTop:document.body.scrollTop; break; case (2): find = window.innerHeight; current = document.menu_base.top; scrollAt = window.pageYOffset; break; case (3): find = window.innerHeight; current = parseInt(document.getElementById('menu_base').style.top); scrollAt = window.scrollY; break; } if (isNaN(Math.log(scrollAt-=layer_top))) scrollAt = 0; newTarget = scrollAt; if (find < layer_height) { do_this_shit = false; if (scrollAt - (layer_height - find) > current) { newTarget -= (layer_height - find); do_this_shit = true; } else if (scrollAt < current) { do_this_shit = true; } } else { do_this_shit = true; } if ( current != newTarget && do_this_shit == true) { if (newTarget != this.target ) { target = newTarget; now = new Date(); Mul = target - current; // Wave = Math.PI / ( 2 * slideTime ); Pass = now.getTime(); if (Math.abs(Mul) > find) { Dis = (Mul > 0) ? target - find : target + find ; Mul = (Mul > 0) ? find : -find ; } else { Dis = current } } now = new Date(); newPosition = Mul * Math.sin( Wave * ( now.getTime() - Pass ) ) + Dis; newPosition = Math.round(newPosition); if (( Mul > 0 && newPosition > current ) || ( Mul < 0 && newPosition < current )) { switch(browser) { case (1): menu_base.style.pixelTop = newPosition; break; case (2): document.menu_base.top = newPosition; break; case (3): document.getElementById('menu_base').style.top = newPosition + 'px'; break; } } } } function startFloatLayer() { var browser; if (document.all) //ie4 { browser = 1; layer_height = document.all['menu_main'].clientHeight; layer_top = document.all['menu_base'].offsetTop - 10; } if (document.layers) //ns4 { browser = 2; layer_top = 67; layer_height = document.menu_base.document.menu_main.document.height } if (!document.all && document.getElementById) //ns6 { browser = 3; layer_height = parseInt(document.getElementById('menu_main').offsetHeight); layer_top = parseInt(document.getElementById('menu_base').offsetTop) - 10; } //alert(browser) //alert(document.getElementById('menu_base').style.top); setInterval("actFloatLayer(600," + layer_top + "," + layer_height +"," + browser + ")",10); }