Wo genau scrollTo() einfügen ???

The_real_Guru

Erfahrenes Mitglied
Ich habe hier einen PHP-Webchat, der leider nicht automatisch nach unten scrollt. Deshalb habe ich an scrollTo() gedacht, doch irgendwie steig ich durch das Script nicht so ganz durch und weiß deshalb nicht, wo ich scrollTo() einfügen muss, damit es funktioniert !?!

Info: Dieser Auszug wird als Frame in den Chat eingebaut.

Code:
<html>
<body bgcolor="#FFFFFF">
<script>
function refresh() {
	time = new Date()
	window.location='receive.php?tstamp='+escape(time);
}
<?
    require './defines.php';
    require './txt2html.php';

    $q = new DB_Chat;
    $r = new DB_Chat;

    $que="select send_id, rcpt_id, message from message left join user on user.last<= message.time
		where user.uid=$uid and message.rid=$rid and 
		(( message.rcpt_id <= 0 ) or ( message.rcpt_id = $uid ) or ( message.send_id = $uid ))";
    $q->query($que);
    while( $q->next_record() ) { 
#    $q->p('message');
      $message = txt2html(rawurldecode($q->f('message')));
      $rcpt_id = $q->f('rcpt_id');	
      $send_id = $q->f('send_id');

      $que="select name from user where uid=$send_id";
      $r->query($que);
      $r->next_record(); 
      $name = $r->f('name');
      if ( $rcpt_id == 0 ) {
        $toOut = '<font color="ff6600"><b>'.$name.'&gt;</b></font> '.$message.'<br>';
      } else if ( $rcpt_id == -1 ) {
        $toOut = '<font color="#222222">'.$name.' '.$message.'</font><br>';
      } else if ( $rcpt_id == $send_id ) {
        $toOut = '<font color="#BB6655"><b>(you)</b> '.$message.'</font><br>';
      } else if ( $send_id == $uid ) {
        $que="select name from user where uid=$rcpt_id";
        $r->query($que);
        $r->next_record(); 
        $name = $r->f('name');
        $toOut = '<font color="#5566BB"><b>(to '.$name.')</b> '.$message.'</font><br>';
      } else  {
        $que="select name from user where uid=$send_id";
        $r->query($que);
        $r->next_record(); 
        $name = $r->f('name');
        $toOut = '<font color="#5566BB"><b>(from '.$name.')</b> '.$message.'</font><br>';
      }
      ?>
      toOut = '<? echo $toOut ?>';
      if (document.all) {
        top.wOut.document.body.innerHTML+= toOut;
      } else {
        top.wOut.document.write("<html><style>BODY {font-family: Verdana, sans-serif; color: #000055; font-size: 12px;} </style><body bgcolor='#FFFFFF'>");
	top.wOut.document.write(toOut);
      }
      <?
    }
 
    $que="update user set last = null where uid=$uid";
    $q->query($que);
?>
setTimeout('refresh()',8000);
</script>
</html>

Guru
 
Hallo,

ich glaube Toolkit hat recht, aber ich habe noch eine andere Frage zum Code: Du benutzt setTimeout('refresh()',8000); - du refreshst also alle 8 Sekunden - ist das nicht zu lang für einen Chat? Ich mein, in 8 Sekunden kann viel geschrieben werden - dadurch verliert man wahrscheinlich schnell die Orientierung im Fenster wenn alle 8 Sekunden ein neuer (evtl Langer) Textblock kommt...

Außerdem verlangt ScrollTo ja einen Aufruf wie window.scrollTo(100,100) - du brauchst also die richtigen Coordinaten - wo bekommst du die her? Das muss ja immer variabel sein, da es ja ganz auf die Menge des neuen Textes ankommt... Mir persönlich würde dazu jetzt keine Lösung einfallen...

bye
 
Naja afaik wird nicht gemeckert wenn man bei scrollto() eine sehr hohe Zahl angibt,ob er dann wirklich so weit scrollt ist ja egal.
 
Zurück