Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

forcer l'ascenseur à rester calé sur le dernier message

9 réponses
Avatar
docanski
Bonjour,

Désolé si cette question n'a pas sa place ici mais s'agissant de
l'utilisation de 2 langages différents, je tente ma chance ici. Si un FU
paraît utile ...

Description de l'évènement : une fenêtre de chat dont les messages sont
actualisés toutes les 5 secondes avec un affichage de bas en haut.
Les messages sont appelés d'une base MySQL sous la variable "$msg"
Problème : si lors de l'actualisation (5 sec) un nouveau message a été
écrit et donc renvoyé dans la fenêtre du chat, l'ascenseur remonte au
lieu de suivre le flux des messages.
Je cherche à forcer l'ascenseur à suivre le flux des messages et donc à
rester systématiquement collé au bas de la fenêtre. Avec la possibilité,
bien entendu, de l'utiliser pour pouvoir lire des messages précédents
situés en dehors de la fenêtre.

Voici le code PHP permettant d'aller chercher les messages dans la BdD
et de les formater :

<code>
$ide= MYSQL_CONNECT($host_mysql,$user_mysql,$pass_mysql);
mysql_select_db("$bd_mysql");
$tm=microtime();$tm2=explode(" ",$tm);$tm3=$tm2[1];
$query = "DELETE FROM $table WHERE (temp+7777)<$tm3";
mysql_query($query,$ide);
$query = "SELECT * FROM $table ORDER BY id DESC";
$result = mysql_query($query,$ide);
$cpt=0;
while($row = mysql_fetch_row($result))
{
$cpt++;
$coul=substr($row[4],0,1);
$tail=substr($row[4],1,1);
$appa=substr($row[4],2,1);
$msg=$row[2];
if ($appa==1){$msg.=$row2;}
if ($appa==2){$msg2="<B>";$msg2.=$msg;$msg2.="</B>";$msg=$msg2;}
if ($appa==3){$msg2="<I>";$msg2.=$msg;$msg2.="</I>";$msg=$msg2;}
if ($appa==4){$msg2="<U>";$msg2.=$msg;$msg2.="</U>";$msg=$msg2;}
if ($appa==5){$msg2="<STRIKE>";$msg2.=$msg;$msg2.="</STRIKE>";$msg=$msg2;}
if ($coul==1){$msg2='<FONT
COLOR="#000000">';$msg2.=$msg;$msg2.="</FONT>";$msg=$msg2;}
if (snip la suite de la série des couleurs utilisables pour chaque
message) ...
echo"- <u>$row[1]</u> <font color=\"999999\">[$row[3]]</font> : $msg<br>";
if ($cpt==20) {break;}
}
MYSQL_CLOSE();
?>
</code>

Si je ne me trompe, je ne vois que JavaScript pour forcer l'ascenseur.
J'envisage ceci :

<script type="text-javascript">
var i = setInterval('$msg()', 5);
function $msg()
{
document.documentElement.scrollTop =
document.documentElement.scrollHeight;
}
</script>

Est-ce que le nom de la variable ne risque pas de poser problème et où
puis-je insérer ce script sans risquer de foirer l'affichage ?

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/

9 réponses

Avatar
SAM
Le 20/05/13 15:13, docanski a écrit :
Si je ne me trompe, je ne vois que JavaScript pour forcer l'ascenseur.
J'envisage ceci :

<script type="text-javascript">
var i = setInterval('$msg()', 5);



Heu ... tous les 5/1000 de seconde ... ça va bien occuper le CPU !!!

Je me demande même si l'utilisateur aura encore l'accès à son mulot, ou
pire : son clavier




Cordialement,
--
Stéphane Moriaux avec/with iMac-intel 27" & Mac OS X 10.6.8
Avatar
SAM
Le 20/05/13 15:13, docanski a écrit :
if ($cpt= ) {


echo 'n<a id="lastOne"></a>';
break;}
}
MYSQL_CLOSE();
?>

<script type="text-javascript">



location = "#lastOne";

</script>




... pas testé ... mais bon espoir.


Cordialement,
--
Stéphane Moriaux avec/with iMac-intel 27" & Mac OS X 10.6.8
Avatar
Paul Gaborit
À (at) Mon, 20 May 2013 15:13:29 +0200,
docanski écrivait (wrote):

Description de l'évènement : une fenêtre de chat dont les messages sont
actualisés toutes les 5 secondes avec un affichage de bas en haut.
Les messages sont appelés d'une base MySQL sous la variable "$msg"
Problème : si lors de l'actualisation (5 sec) un nouveau message a été
écrit et donc renvoyé dans la fenêtre du chat, l'ascenseur remonte au
lieu de suivre le flux des messages.
Je cherche à forcer l'ascenseur à suivre le flux des messages et donc à
rester systématiquement collé au bas de la fenêtre. Avec la possibilité,
bien entendu, de l'utiliser pour pouvoir lire des messages précédents
situés en dehors de la fenêtre.


[...]
Si je ne me trompe, je ne vois que JavaScript pour forcer l'ascenseur.
J'envisage ceci :

<script type="text-javascript">
var i = setInterval('$msg()', 5);
function $msg()
{
document.documentElement.scrollTop > document.documentElement.scrollHeight;
}
</script>



Puisque le contenu ne change qu'après le rechargement de la page
complète en PHP, il suffit de positionner l'ascenseur une seule fois
(lors du rechargement). Cela permettra à l'utilisateur de se balader
entre chaque chargement. Selon vos spécifications, il n'a que 5 secondes
pour le faire ce qui ne lui laisse pas beaucoup de temps pour trouver un
vieux message et le lire. Un rechargement toutes les 30 secondes ou même
toutes les minutes me semblerait plus adapté...

Une méthode bien meilleure serait de ne recharger que le contenu de la
fenêtre de chat via une requête javascript et de ne repositionner
l'ascenseur en bas du contenu que s'il y était déjà...


--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Avatar
docanski
Alors que les eleveurs et agriculteurs empoisonnent toujours la
Bretagne, docanski ecrit ce qui suit en ce 20/05/2013 15:13 :

$cpt=0;
$cpt++;
if ($cpt= ) {break;}



Oups ! Je viens de me rendre compte que c'est un script non corrigé que
j'avais envoyé. Le code définitif ne comporte plus les 3 lignes ci-dessus.
Désolé.
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
Avatar
docanski
Alors que les eleveurs et agriculteurs empoisonnent toujours la
Bretagne, Paul Gaborit ecrit ce qui suit en ce 21/05/2013 11:19 :

Puisque le contenu ne change qu'après le rechargement de la page
complète en PHP, il suffit de positionner l'ascenseur une seule fois
(lors du rechargement).



Le contenu ne change pas, c'est simplement le ou les nouveaux messages
envoyés dans l'intervalle de rafraîchissement de 5 secondes qui viennent
s'y ajouter.

Un rechargement toutes les 30 secondes ou même
toutes les minutes me semblerait plus adapté...



Impossible sans nuire à la fluidité voulue car en cours de chat
plusieurs messages peuvent être envoyés pendant ce cours laps de temps.
Pour le moment, quand l'utilisateur remonte l'ascenceur, il ne se
repositionne pas au bas de la page lors du rafraîchissement : il reste
sur sa dernière position.
Je cherche donc à positionner l'ascenseur automatiquement au niveau du
dernier message lors du rafraîchissement mais en laissant la possibilité
à l'utilisateur de le positionner où il veut. Il s'agit donc de forcer
cet ascenseur uniquement si l'utilisateur ... ne le force pas à son tour.
Le tout est de savoir si PHP+SQL+JS peut le faire. Je sais que c'est
possible avec Flash (que je ne n'ai jamais essayé pour ce faire et que
je préfère éviter), comme le fait l'application "coveritlive"

Une méthode bien meilleure serait de ne recharger que le contenu de la
fenêtre de chat via une requête javascript et de ne repositionner
l'ascenseur en bas du contenu que s'il y était déjà...



Ben ... c'est justement ce que je cherche. Le tout est de savoir coder
cet évènement.

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
Avatar
SAM
Le 21/05/13 17:40, docanski a écrit :
Alors que les eleveurs et agriculteurs empoisonnent toujours la
Bretagne, Paul Gaborit ecrit ce qui suit en ce 21/05/2013 11:19 :

Puisque le contenu ne change qu'après le rechargement de la page
complète en PHP, il suffit de positionner l'ascenseur une seule fois
(lors du rechargement).



Le contenu ne change pas, c'est simplement le ou les nouveaux messages
envoyés dans l'intervalle de rafraîchissement de 5 secondes qui viennent
s'y ajouter.



Le contenu ne change pas
mais ...
ce ne sont pas/plus les mêmes messages
? ! ? ! ? !

Je cherche donc à positionner l'ascenseur automatiquement au niveau du
dernier message lors du rafraîchissement mais en laissant la possibilité
à l'utilisateur de le positionner où il veut. Il s'agit donc de forcer
cet ascenseur uniquement si l'utilisateur ... ne le force pas à son tour.
Le tout est de savoir si PHP+SQL+JS peut le faire. Je sais que c'est
possible avec Flash (que je ne n'ai jamais essayé pour ce faire et que
je préfère éviter), comme le fait l'application "coveritlive"

Une méthode bien meilleure serait de ne recharger que le contenu de la
fenêtre de chat via une requête javascript et de ne repositionner
l'ascenseur en bas du contenu que s'il y était déjà...



Ben ... c'est justement ce que je cherche. Le tout est de savoir coder
cet évènement.



exemple non testé, mais ça doit fonctionner :

'monIframeAMoi' est le "name" de l'iframe de tchat,

[JS]
var delai = 5; // secondes
function aJour() { parent.monIframeAMoi.location.reload(); }
setInterval(aJour, delai*1000);
[/JS]

Hop !

Enfin ... presque ... on n'a pas jamais fait scroler sur le dernier
message ... :-(
on se contente de respecter le scroll déjà effectué (par qui que ce
soit, JS ou utilisateur)


alors, tentons ceci :

[JS de la page pincipale]
var delai = 5; // secondes
var indicateur = 0;
function aJour() {
indicateur = 1;
parent.monIframeAMoi.location.reload();
}
setInterval(aJour, delai*1000);
[/JS]

en fin de body de l'iframe :

<script type="text/javascrip">
if(!parent.indicateur) this.location = '#fin';
</script>
<a name="fin" id="fin"></a>
</body></html>



Mais ... si l'utilisateur est remonté dans les messages et qu'un nouveau
arrive il ne le saura pas ... :-(


Cordialement,
--
Stéphane Moriaux avec/with iMac-intel 27" & Mac OS X 10.6.8
Avatar
docanski
Alors que les eleveurs et agriculteurs empoisonnent toujours la
Bretagne, SAM ecrit ce qui suit en ce 24/05/2013 17:50 :

Le contenu ne change pas
mais ...
ce ne sont pas/plus les mêmes messages
? ! ? ! ? !



A mont tour : ? ! ? ! ? !

[JS]
var delai = 5; // secondes
function aJour() { parent.monIframeAMoi.location.reload(); }
setInterval(aJour, delai*1000);
[/JS]



2 délais de rafraîchissement pour la même page ? C'est pas un peu
beaucoup ? Me demande si je ne vais pas plutôt acheter un sapin de Noël :-)

Mais ... si l'utilisateur est remonté dans les messages et qu'un nouveau
arrive il ne le saura pas ... :-(



Et patatras ! Mébon, c'est pas un canon pour tuer une mouche, ce double
script ?
Tu n'as pas essayé in vitro avec les codes PHP envoyés précédemment ?
Il y en a 3 qui entrent en jeu pour obtenir l'affichage : index, message
et affichage.
Si tu veux, je te les envoie en MP ?

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/
Avatar
SAM
Le 25/05/13 19:29, docanski a écrit :
Alors que les eleveurs et agriculteurs empoisonnent toujours la
Bretagne, SAM ecrit ce qui suit en ce 24/05/2013 17:50 :

Le contenu ne change pas
mais ...
ce ne sont pas/plus les mêmes messages
? ! ? ! ? !



A mont tour : ? ! ? ! ? !



Tu dis 2 choses opposées :
(ne change pas mais se modifie)

[JS]
var delai = 5; // secondes
function aJour() { parent.monIframeAMoi.location.reload(); }
setInterval(aJour, delai*1000);
[/JS]



2 délais de rafraîchissement pour la même page ?



Non, je te corrige ton script.

C'est pas un peu
beaucoup ? Me demande si je ne vais pas plutôt acheter un sapin de Noël :-)



avec un clignotement de 5 millisecondes ?

Mais ... si l'utilisateur est remonté dans les messages et qu'un nouveau
arrive il ne le saura pas ... :-(



Et patatras ! Mébon, c'est pas un canon pour tuer une mouche, ce double
script ?
Tu n'as pas essayé in vitro avec les codes PHP envoyés précédemment ?



qué codes php ?
Je n'ai rien vu
(à part le 'tit esstrait de manip de BdD et isolé du contexte)

Il y en a 3 qui entrent en jeu pour obtenir l'affichage : index, message
et affichage.
Si tu veux, je te les envoie en MP ?



Non, non. J'ai juste joué avec le tChat en ligne
Comme chez moi ça ne rafraichi pas ça prend des plombes, le temps que je
réalise de faire ré-afficher (comme si le bouton d'envoi ne savait pas
le faire tout seul ???)
et comme j'étais tout seul à (laborieusement) tenter de tChater, je n'ai
jamais rempli la fenêtre de l'iFrame ... histoire de voir à voir
l'étendue du problème.


Cordialement,
--
Stéphane Moriaux avec/with iMac-intel 27" & Mac OS X 10.6.8
Avatar
docanski
Alors que les eleveurs et agriculteurs empoisonnent toujours la
Bretagne, SAM ecrit ce qui suit en ce 26/05/2013 23:52 :

Mais ... si l'utilisateur est remonté dans les messages et qu'un nouveau
arrive il ne le saura pas ... :-(





qué codes php ?
Je n'ai rien vu
(à part le 'tit esstrait de manip de BdD et isolé du contexte)



Oui, c'est vrai, j'avais oublié : le début de la mise en route du tchat
avait fait l'objet d'une question sur fclp où j'avais publié les codes
de ces pages.
Mais c'est vrai qu'ils étaient également extraits des pages ... pisque
seul le PHP intéresse ce groupe.
Si tu veux bricoler à l'occasion avec le tout, je peux t'envoyer un zip
complet en MP. Ou autre format d'archive, si tu préfères.

Non, non. J'ai juste joué avec le tChat en ligne
Comme chez moi ça ne rafraichi pas ça prend des plombes, le temps que je
réalise de faire ré-afficher (comme si le bouton d'envoi ne savait pas
le faire tout seul ???)



Ben ça le fait ! Testé avec Firefox, Internet Exploseur et Google Chrome
+ des navigateurs sous Gecko développés pour Linux.
Mauvais navigateur (Safari ?), changer navigateur. ;-)

et comme j'étais tout seul à (laborieusement) tenter de tChater, je n'ai
jamais rempli la fenêtre de l'iFrame ... histoire de voir à voir
l'étendue du problème.



Suis à nouveau en plein bricolage maison : peintures, tapissage et
parquet. Comme j'ai un copain à la maison pour m'aider, je n'aurai pas
le temps de suivre ces prochains jours mais dès que je m'y remets, je
teste tes scripts. Ceci dit, c'est le 1er ou le second qui fonctionne et
qu'il faut essayer ?

Cordialement,
--
docanski

Portail et annuaire du nord-Bretagne : http://armorance.free.fr/
Guide des champignons d'Europe : http://mycorance.free.fr/
La vallée de la Rance maritime : http://valderance.free.fr/
Les côtes du nord de la Bretagne : http://docarmor.free.fr/