Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][JavaScript]Nieskończone przewijanie z animacją loadingu
Forum PHP.pl > Forum > Przedszkole
gitbejbe
Witam.

Chcę zrobić skrypt, który będzie ładował mi do okna "columns_window" zdjęcia po przewinięciu strony w dół. Narazie udało mi się napisać sama funkcje, która wykrywa odpowiednio scroll i ładuje ajax'a. Chciałbym jednak aby podczas tego ładowania pojawiał się div z napisem "wczytuje", i znikał jak dokona wczytania zdjęć. Obecnie pojawia się taki napis, ale źle to wygląda i bez animacji... Chciałbym aby był to jakiś fade albo wysuwał się z dołu i znikał przynajmiej po opóźnieniu 500. Gryze się z tym tematem i metodą prób i błędów nadal nie mogę tego osiągnąć.

poniżej działający kod:

  1. <div id="content">
  2. <div id="content_column_gallery">
  3. <div class="columns_window">
  4.  
  5. tutaj mają pojawiać się zdjęcia
  6.  
  7. <div id="loadmoreajaxloader" style="display:none;"><center><img src="ajax-loader.gif" />wczytuje</center></div>
  8. </div>
  9. </div>
  10.  
  11. </div>
  12.  
  13. </div>

a tutaj ajax:
  1. <script type="text/javascript">
  2.  
  3. $('#content_column_gallery').scroll(function()
  4. {
  5. var x = document.getElementsByClassName("columns_window")[0];
  6. if($('#content_column_gallery').scrollTop() + $('#content_column_gallery').height() > x.offsetHeight)
  7. {
  8. $('div#loadmoreajaxloader').show();
  9.  
  10. $.ajax({
  11. url: "s/ajax.php",
  12. success: function(html)
  13. {
  14. if(html)
  15. {
  16. $(".columns_window").append(html);
  17. $('div#loadmoreajaxloader').hide();
  18. }else
  19. {
  20. $('div#loadmoreajaxloader').html('<center>Brak więcej zdjęć.</center>');
  21. }
  22. }
  23. });
  24. }
  25. });
  26.  


Wdzięczny byłbym również za podpowiedź jak dodać animacje "jquery masonry" dla wczytanych zdjęć, aby ładnie pojawiały się na ekranie.
artuross
Kod
$('div#loadmoreajaxloader').show();
// i
$('div#loadmoreajaxloader').hide();

// robisz instant wejscie/znikanie, zastosuj teraz fade :)
gitbejbe
to chyba nie takie proste...przynajmniej nie dla mnie.

znalazłem taki skrypt:
  1. var fadeEffect=function(){
  2. return{
  3. init:function(id, flag, target){
  4. this.elem = document.getElementById(id);
  5. clearInterval(this.elem.si);
  6. this.target = target ? target : flag ? 100 : 0;
  7. this.flag = flag || -1;
  8. this.alpha = this.elem.style.opacity ? parseFloat(this.elem.style.opacity) * 100 : 0;
  9. this.elem.si = setInterval(function(){fadeEffect.tween()}, 20);
  10. },
  11. tween:function(){
  12. if(this.alpha == this.target){
  13. clearInterval(this.elem.si);
  14. }else{
  15. var value = Math.round(this.alpha + ((this.target - this.alpha) * .05)) + (1 * this.flag);
  16. this.elem.style.opacity = value / 100;
  17. this.elem.style.filter = 'alpha(opacity=' + value + ')';
  18. this.alpha = value
  19. }
  20. }
  21. }
  22. }();

tutaj demo : klik
a tutaj tutek do tej animacji: klik

jak teraz odwołać się do tej funkcji aby "$('div#loadmoreajaxloader').show();" wykonywało się w powyższej funkcji ?
na stronie z tutkiem jest podane, że : fadeEffect.init('fade', 1, 50), wywoła to funkcje po kliknięciu w button'a. A ja chcę aby się to wykonało podczas ładowania ajaxa z opóźnieniem np sekundy.
tak samo chcę zrobić dla .hide().

Prosiłbym o gotową linijkę kodu sad.gif naprawdę sam nic nie wymyśle.... będę bardzo wdzięczny !
artuross
jQuery ma taka funkcjonalonsc wbudowana, zamiast hide() i show() dajesz http://api.jquery.com/fadeIn/ i .fadeOut(). Opoznienie mozesz wykonac poprzez .delay() (tez jQuery). Wybacz, nie chce mi sie linkowac, ale skoro masz metody podane to juz nie powinno byc problemem smile.gif
gitbejbe
ok dzięki : ) pomogło wg Twoich wskazań.

$('div#loadmoreajaxloader').fadeIn('slow').delay(800);

a mógłbyś jeszcze podpowiedzieć jak wykonać jakąś sensowną animacje pojawianych się zdjęć ?
myślałem o "jquery masonry" ale nie wiem jak do tego podejść....
artuross
Nie ma sensu wykonywac takiej animacji, po pierwsze dlatego, ze one najpierw musza sie wczytac, a z tego co widze u Ciebie, to pobierasz kod html z linkami, po prostu dodaj animation, a wewnatrz tego height + opacity zmien.
gitbejbe
ogólnie to dążę do takiego efektu: klik
chciałbym aby wczytane zdjęcia pojawiały się właśnie w ten sposób.
W tym demo (link), skrypt wykonany jest tak, że ładuje zdjęcia z innych plików html. Ja chcę zrobić dokładnie to samo co na tej stronie, tylko chciałbym aby zdjęcia ładowane były poprzez ajax - zachowując jednocześnie tą samą animacje...

ok, poradziłem sobie : )

$(function(){

$('.columns_window').masonry({
itemSelector: '.content_column_gallery_item',
columnWidth: 100
});

});

Dzięki jeszcze raz za pomoc : ) !
artuross
Aby uzyskac taki efekt musisz jeszcze troche zrobic. Jak na razie masz pobrany kod HTML, ale kiedy juz to zaladujesz do DOM, dopiero zacznie sie wczytywanie zdjec... A dopiero kiedy zdjecia sie wczytaja zostana one pokazane na stronie. Ty musisz zrobic tak, aby zawartosc zostala dodana do DOM, gdy juz bedzie calosc pobrane (nie tylko linki do zdjec, ale takze zdjecia).
Najlatwiej bedzie pobrac same linki (+ ewentualnie inna zawartosc, podpisy, itd.) w formacie JSON. Te linki powinienes uzyc do utworzenia nowych obiektow (a dopiero, gdy zawartosc tych obiektow zostanie pobrana przez UA dodac na strone).
gitbejbe
rozumiem o co Ci chodzi, ale o ile w php nie ma u mnie z niczym problemów, tak w js/ajax jestem zupełnie zielony... Znasz może jakieś ciekawe gotowe rozwiązania ? nie muszą być w postaci tej przedstawionej wyżej(czyli animacji masonry). Wystarczy mi, aby zdjęcia wczytywały się tak jak mówisz. Fakt, myślalem już o tym, ze lepiej byłoby załadować najpierw samo okno i ewentualnie treść, a dopiero później ładować zdjęcia ale wiem, że zmarnuje więcej czasu na próbie tego zrozumienia niż na przerobienie gotowca...
artuross
http://lmgtfy.com/?q=image+preloader+jquery

BTW. preloader moze tylko wczytac zdjecia, a wyswietlenie moze nastapic za pomoca tej animacji, ktora chcesz uzyskac, wystarczy odpowiednio przystosowac skrypt, w jQuery zazwyczaj wystarczy dac odpowiednia funkcje callback.
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.