Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [AJAX][MySQL][PHP] Unieruchomienie przewijania w czacie
misterious
post
Post #1





Grupa: Zarejestrowani
Postów: 52
Pomógł: 2
Dołączył: 7.10.2012

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
misterious
post
Post #3





Grupa: Zarejestrowani
Postów: 52
Pomógł: 2
Dołączył: 7.10.2012

Ostrzeżenie: (0%)
-----


Hehe (IMG:style_emoticons/default/smile.gif)
Jakaś podpowiedź z czego skorzystać? (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #4





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
misterious
post
Post #5





Grupa: Zarejestrowani
Postów: 52
Pomógł: 2
Dołączył: 7.10.2012

Ostrzeżenie: (0%)
-----


Nawet nie pomyślałem że rozwiązenie może być tak proste (IMG:style_emoticons/default/biggrin.gif)
Dziękuję, przy tworzeniu nowego czatu wykorzystam to, a narazie zostawię tak jak jest (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.09.2025 - 18:24