Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][MySQL][PHP] Unieruchomienie przewijania w czacie
Forum PHP.pl > Forum > Przedszkole
misterious
Witam!
Spróbowałem napisać swój własny czat - wszystko działa perfekcyjnie, z jedną wadą: pasek przewijania (góra/dół) po automatycznym odświeżeniu (przez ajax) przewija się spowrotem do góry.
  1. // Customise those settings
  2.  
  3. var seconds = 5;
  4. var divid = "czat";
  5. var url = "czat.php";
  6.  
  7. ////////////////////////////////
  8. //
  9. // Refreshing the DIV
  10. //
  11. ////////////////////////////////
  12.  
  13. function czatdiv(){
  14.  
  15. // The XMLHttpRequest object
  16.  
  17. var xmlHttp;
  18. try{
  19. xmlHttp=new XMLHttpRequest(); // Firefox, Opera 8.0+, Safari
  20. }
  21. catch (e){
  22. try{
  23. xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
  24. }
  25. catch (e){
  26. try{
  27. xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  28. }
  29. catch (e){
  30. alert("Your browser does not support AJAX.");
  31. return false;
  32. }
  33. }
  34. }
  35.  
  36. // Timestamp for preventing IE caching the GET request
  37.  
  38. fetch_unix_timestamp = function()
  39. {
  40. return parseInt(new Date().getTime().toString().substring(0, 10))
  41. }
  42.  
  43. var timestamp = fetch_unix_timestamp();
  44. var nocacheurl = url+"?t="+timestamp;
  45.  
  46. // The code...
  47.  
  48. xmlHttp.onreadystatechange=function(){
  49. if(xmlHttp.readyState==4){
  50. document.getElementById(divid).innerHTML=xmlHttp.responseText;
  51. setTimeout('czatdiv()',seconds*1000);
  52. }
  53. }
  54. xmlHttp.open("GET",nocacheurl,true);
  55. xmlHttp.send(null);
  56. }
  57.  
  58. // Start the refreshing process
  59.  
  60. var seconds;
  61. window.onload = function startrefresh(){
  62. setTimeout('czatdiv()',seconds*1000);
  63. }

Moje pytanie następujące: jak zrobić, aby pasek zostawał nienaruszony?
nospor
To nie pasek sie przewija, tylko Ty nadpisujesz calą zawartosc DIVa przez co zerujesz wszystko.

Po nadpisaniu scrolluj na sam dol. Ale i tu bedzie problem jesli ktos byl ze scrollem w srodku a nie na koncu to wowczas bedzie sie wkurzal ze mu scrolluje nonstop na dol smile.gif

Bo to sie robi tak panie kolego: wiadomosci to sie dodaje nowe do tego co juz jest, a nie pobiera wszystko i za kazdym razem wszystko nadpisuje
misterious
Hehe smile.gif
Jakaś podpowiedź z czego skorzystać? smile.gif
SmokAnalog
Przede wszystkim warto użyć jakiejś biblioteki, np. jQuery - będzie i wiele łatwiej.

Czat powinien raczej działać na socketach, ale to trochę wyższa szkoła jazdy, więc póki co Ajax też da radę. Jeśli przechowujesz treść czatu np. w bazie danych, to możesz trzymać w sesji ID ostatniej odebranej wiadomości, albo przekazywać ją do pobieracza. Pobieracz zwraca tylko wiadomości, które są nowsze od tej o danym ID. Ty wtedy dodajesz odpowiednie elementy HTML do swojego diva.
misterious
Nawet nie pomyślałem że rozwiązenie może być tak proste biggrin.gif
Dziękuję, przy tworzeniu nowego czatu wykorzystam to, a narazie zostawię tak jak jest smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.