Mai mult
Derulați la partea de jos a div?
Am creat un chat folosind ajax cereri în șine și am'm încercarea de a obține un div pentru a defila la partea de jos, fără prea mult noroc.
Am împachetat totul în această div:
#scroll {
height:400px;
overflow:scroll;
}
Există o modalitate de a păstra defilat în jos în mod implicit, folosind JS?
Există o modalitate de a păstra defilat în jos după o cerere ajax?
746
22
Aici's ceea ce am folosi pe site-ul meu:
Acest lucru este mult mai ușor dacă ai're folosind jQuery scrollTop:
folosind jQuery anima:
Puteți folosi următorul cod:
Pentru a efectua un buna derulați cu JQuery:
Vezi exemplu pe [JSFiddle][1]
Și că's cum funcționează:
[ ][1]
Ref: scrollTop, scrollHeight, clientHeight
Lucrări de jQuery 1.6
https://api.jquery.com/scrollTop/
http://api.jquery.com/prop/
Metodă nouă, care funcționează pe toate browserele actuale](https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView):
Dacă tu nu't doriți să se bazeze pe scrollHeight`, următorul cod:
buna derulați cu Javascript:
document.getElementById('mesaje').scrollIntoView({ comportament: 'buna', bloc: 'end' });
Folosind jQuery, scrollTop este folosit pentru a seta poziția verticală a scollbar pentru orice element dat. există, de asemenea, un frumos jquery scrollTo plugin folosit pentru a defila cu animație și opțiuni diferite (demo)
dacă doriți să utilizați jQuery's anima metoda pentru a adăuga animație în timp ce defilare în jos, verificați următorul fragment:
Javascript sau jquery:
Css:
Găsit acest lucru foarte util, vă mulțumesc.
Pentru Unghiulare 1.X oameni de acolo:
Doar pentru că ambalajul în jQuery elemente versus HTML DOM elemente devine un pic confuz cu unghiulară.
De asemenea, pentru o aplicație de chat, am găsit de a face această misiune după discuții au fost încărcate pentru a fi util, de asemenea, ar putea avea nevoie să palmă pe scurt timeout la fel de bine.
Doar ca un bonus fragment. Am'm folosind unghiulare și a fost încercarea de a derula un mesaj firul în partea de jos atunci când un utilizator selectat diferite conversații cu utilizatorii. În scopul de a face sigur că scroll funcționează după noile date au fost încărcate în div cu ng-repeat pentru mesaje, înfășurați doar scroll fragment într-un timeout.
Care va asigurați-vă că alegeți eveniment este concediat după ce datele au fost introduse în DOM.
mic addendum: suluri numai dacă ultima linie este deja vizibil. dacă defilat un pic, frunze de conținut în cazul în care este (atenție: nu a fost testat cu diferite dimensiuni de font. acest lucru ar putea nevoie de unele ajustări în interiorul ">= comparație"):
Puteți, de asemenea, folosind jQuery, atașați o animație a `html,body a documentului prin:
$("html,body").animate({scrollTop:$("#div-id-ul")[0].offsetTop}, 1000);
ceea ce va duce la o buna derulați până la partea de sus a div cu id-ul "div-id-ul".
Am întâlnit aceeași problemă, dar cu o constrângere suplimentară: am avut nici un control asupra codul care a adăugat elemente noi de la cartea recipientului. Nici unul dintre exemplele pe care le-am găsit aici mi-a permis să facă asta. Aici este soluția la care am ajuns .
Se foloseste Mutație de Observatori (https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver) ceea ce îl face utilizabil doar pe browserele moderne (deși polyfills exista)
Deci, practic, codul nu doar asta :
Am făcut o vioară pentru a demonstra conceptul : https://jsfiddle.net/j17r4bnk/
Acest lucru va permite să derulați tot drumul în jos ceea ce privește documentul înălțime
Java Script:
document.getElementById('mesaje').scrollIntoView(false);
Pergamentele de la ultima linie de conținutul prezent.
O metoda foarte simpla pentru acest lucru este de a stabili `derulați până la o înălțime de div.
Derulați până la ultimul element din interiorul div:
Știu că este o întrebare veche, dar niciuna dintre aceste soluții nu a lucrat pentru mine. Am încheiat cu offset().de sus pentru a obține rezultatele dorite. Aici's ceea ce am folosit pentru ușor derulați ecranul în jos la ultimul mesaj în aplicație de chat:
Sper că acest lucru vă ajută altcineva.