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

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
Bibilefou
Salamandre
Messages : 46
Inscription : 20 sept. 2003, 14:34

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

Message 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
Dernière modification par Bibilefou le 15 nov. 2007, 13:29, modifié 1 fois.
Bibilefou
Salamandre
Messages : 46
Inscription : 20 sept. 2003, 14:34

Message 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 ...
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités