Scrollbar

Mimoune
Invité n'ayant pas de compte PHPfrance

24 nov. 2007, 23:03

Bonjour,

Je suis sur un projet de mini-chat pour lequel j'ai défini une zone d'affichage du texte avec un scroll auto qui vient se placer toujours en bas de la zone...

Est-il possible de désactiver le retour en bas de page lorsque l'on clique sur le scroll pour afficher une ligne spécifique choisie ??

Voici mon code js :

Code : Tout sélectionner

function refresh(){ if (document.getElementById("session")!=null){ xmlHttpTxt=GetXmlHttpObject(); xmlHttpTxt.onreadystatechange = stateChanged_Ref; xmlHttpTxt.open("POST","chatRef.asp",true); var dataPost="log=x"; xmlHttpTxt.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlHttpTxt.send(dataPost); } var objDiv = document.getElementById("affiche"); objDiv.scrollTop = objDiv.scrollHeight; setTimeout("refresh()",1000); }
La fonction est appelée onload...

Merci d'avance pour vos réponses...

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

24 nov. 2007, 23:44

Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "Javascript, AJAX".

Merci de prendre le temps de lire les règlements
ainsi que l'intitulé de chaque forum avant de poster un nouveau sujet.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mimoune
Invité n'ayant pas de compte PHPfrance

25 nov. 2007, 16:08

up !

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

25 nov. 2007, 16:10

Modération :
Mimoune, les "up" sont interdits sur PHPFrance.

Si tu n'as pas obtenu de réponse, c'est (au choix) :
- que ta question est mal formulée : reformule-la différemment ;
- que personne ne connaît la réponse ici : faire un "up" ne te donnera pas davantage de résultats ;
- que la réponse demandée exige un travail important que personne ne va faire à ta place ;
- que trop peu de temps s'est écoulé depuis ton précédent message pour qu'un membre ait pu y répondre.

Merci de prendre le temps de lire les règlements.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 445 Messages

25 nov. 2007, 18:24

Bon je viens de reussir ce que tu cherchais.

C'est un peu de la bidouille mais cela fonctionne sur firefox 2 et IE 6. (Pas tester sur les autres)
// Variable qui definit si l'utilisateur a utilise la scrollbar
var scrolled = 0 ;

function refresh()
{
   if (document.getElementById("session")!=null){
      xmlHttpTxt=GetXmlHttpObject();
      xmlHttpTxt.onreadystatechange = stateChanged_Ref;
      xmlHttpTxt.open("POST","chatRef.asp",true);
      var dataPost="log=x";
      xmlHttpTxt.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      xmlHttpTxt.send(dataPost);
   }

   var objDiv = document.getElementById("affiche");
   // Si la scrollbar a ete utilise alors aucun defilement automatique
   // Sinon on defile
   if(scrolled==0)
   {
      objDiv.scrollTop = objDiv.scrollHeight;
      // Pour outrepasser l'affection de scrolled par l'evenement onscroll active par
      // le changement de scrollTop
      setTimeout("set()",10);
   }

   setTimeout("refresh()",1000);
}

function scroll()
{
   var d = document.getElementById("affiche");
   // val=0 quand la scrollbar est tout en bas
   var val = d.scrollTop + d.clientHeight - d.scrollHeight ;
   // si la scrollbar est en bas alors on repasse en mode automatique
   // sinon on reste en mode libre
   scrolled = (val==0)?0:1 ;
}

function set()
{
   scrolled = 0 ;
}
Et ajoutes un evenement a ton div
<div id="affiche" onscroll="scroll();"></div>
Demonstration ici.
Modifié en dernier par h0_noMan le 25 nov. 2007, 20:42, modifié 3 fois.

ViPHP
AB
ViPHP | 5818 Messages

25 nov. 2007, 18:49

@h0_noMan, merci d'avoir rajouté le code :wink:

Eléphant du PHP | 445 Messages

25 nov. 2007, 19:19

@h0_noMan, merci d'avoir rajouté le code :wink:
Et les commentaires aussi ;)
N'empeches que je deteste buter sur un code qui ne semble pas si compliquer que ça.