Page 1 sur 1

Javascript, défilement de DIV bien galère ....

Publié : 24 févr. 2004, 00:12
par Bibilefou
Salut !

Je le dis tout de suite, les frames, j'aime pas. :roll:
Maintenant, il faut faire avec ... J'ai une page avec pas mal de truc dessus quand même.

Ce qui me pose problème, c'est un script qui me permet (dans l'idéal) de faire défiler des calques à la façon d'une iframe.

Je n'arrive pas à voir où ça foire (sous IE, Firebird : ok)...
Quelqu'un pourrait m'aider ?

La page en question :
[...]

Le script JS :

Code : Tout sélectionner

function vertScroll(calque, dir, spd, loop) {
   if (document.layers && (!document.all || !document.getElementById))return;
   var y_pos=0, last_pos=0;
   loop = true;
   direction = dir;
   speed = spd;
   scrolltimer = null;
   if (document.getElementById)
       var page= document.getElementById(calque);
   else {
       if (document.all)
         var page = document.all.calque;
   }
   y_pos = page.offsetTop;
   last_pos = page.style.top.substring(0,page.style.top.indexOf('px'));
//   window.status = y_pos+" / "+last_pos;
   if (loop == true) {
     if (direction == "dn" && y_pos>-page.offsetHeight) page.style.top = (y_pos - (speed))+"px";
     else {
       if (direction == "up" && last_pos>-page.offsetHeight) page.style.top = (last_pos - (speed))+"px";
   }
   scrolltimer = setTimeout(function(){vertScroll(calque, dir, spd, loop)}, 25);
   }
}
function noScroll() {
   if (document.layers && (!document.all || !document.getElementById))return;
   loop = false;
   clearTimeout(scrolltimer);
}
Sous IE, ça défile dans un seul sens ...
Je suis perdu là ...

-------------------------------------------------------
Edit :
le script JS original :

Code : Tout sélectionner

function vertScroll(calque, dir, spd, loop) {
   if (document.layers && (!document.all || !document.getElementById))return;
   var y_pos=0;
   loop = true;
   direction = dir;
   speed = spd;
   scrolltimer = null;
     if (document.getElementById)
       var page= document.getElementById(calque);
     else {
       if (document.all)
         var page = document.all.calque;
   }

   y_pos = page.offsetTop;
   window.status= y_pos;
   if (loop == true) {
     if (direction == "dn" && y_pos>-page.offsetHeight) page.style.top = (y_pos - (speed))+"px";
     else {
       if (direction == "up" && y_pos < 1) page.style.top = (y_pos + (speed))+"px";
       else {
       if (direction == "top") page.style.top = "0px";
      }
   }
   scrolltimer = setTimeout(function(){vertScroll(calque, dir, spd, loop)}, 25);
   }
}
function noScroll() {
   if (document.layers && (!document.all || !document.getElementById))return;
   loop = false;
   clearTimeout(scrolltimer);
}
Avec celui ci, seul un calque se déplace sous IE et le sens est diférent entre Firebird et IE ...
C'est la fin des haricots ce truc !

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9

Publié : 24 févr. 2004, 19:12
par Bibilefou
Bon, ça évolue doucement ....

Code : Tout sélectionner

function vertScroll(calque, dir, spd, loop) {
   if (document.layers && (!document.all || !document.getElementById))return;
   var endY=0, maxY=0, ydir=0, speed=0;
   var now = ( new Date() ).getTime();
   loop = true;
   direction = dir;
   speed = spd;
   scrolltimer = null;
   if (document.getElementById) {
       var conteneur= document.getElementById(calque);
	   var contenu= document.getElementById(calque+"Content");
   } else {
       if (document.all) {
         var conteneur = document.all.calque;
		 var contenu = document.all.calque+"Content";
	   }
   }
   maxY = ( (contenu.offsetHeight - conteneur.offsetHeight)> 0)? contenu.offsetHeight-conteneur.offsetHeight: 0;
   if (loop == true) {
//     ydir = (direction == "dn")? -1: 1;
     ydir = (direction == "dn")? -speed: speed;
	 endY = (direction == "dn")? -maxY: 0;
	 lastTime = now;
//	 y = parseInt(contenu.style.top) + Math.round( ydir * (now - lastTime)/1000 * speed );
	 y = parseInt(conteneur.style.top) + ydir;
	 if ( y>-maxY || y<0 ) {
		conteneur.style.top = y+"px";
	 } else conteneur.style.top = endY+"px";
//	 window.status = "ydir:"+ydir+" endY:"+endY+" y:"+y+" maxY:"+maxY;
	 scrolltimer = setTimeout(function(){vertScroll(calque, dir, spd, loop)}, 30);
   }
}

function noScroll() {
   if (document.layers && (!document.all || !document.getElementById))return;
   loop = false;
   clearTimeout(scrolltimer);
}
Toujours pareil, le deuxième calque ne défile pas ...