witam.

najpierw link do mojej stronki: KLIK

chcę zrobić wczytywanie obrazków (na stronie są narazie w postaci czarnych div'ów) za pomocą ajax.
Zależy mi również, na animacji "masonry".

Link do animacji masonry = KLIK
(animacja ładnie rozmieszcza divy, przy skalowaniu jest fajny efekt)

Obie te rzeczy doskonale działają, ale niestety nie wtedy gdy z sobą współpracują.

animacja masonry oraz wczytywanie ajax'a tyczy się tego samego diva o id="container". Jeśli wyrzucę funkcje js ze wczytywaniem kolejnych obrazków, to masonry działa jak trzeba.

Wiem, że gdy wczyta się funkcja z ajax, to masonry przestaje obsługiwać czarne divy. Wiem też, że zapewne obie te funkcje trzeba połączyć w jedno ale za cholere nie mam pojęcia jak to zrobić.

Znajdzie się pomocna dusza ?

poniżej kod:

  1. <div id="content_gallery_big">
  2. <div id="container" class="clearfix">
  3.  
  4. // tutaj ajax wczytuje czarne divy. Jeśli wyrzucę funkcje z ajaxem i wstawie tutaj x razy "<div class="item"></div>", to animacja masonry działa ok.
  5.  
  6. </div> <!-- #container -->
  7. </div>
  8.  
  9. //animacja masonry
  10.  
  11. $(function(){
  12.  
  13. $('#container').masonry({
  14. itemSelector: '.item',
  15. columnWidth: 1,
  16. isAnimated: true,
  17. animationOptions:
  18. {
  19. duration: 500,
  20. easing: 'linear',
  21. queue: false
  22. }
  23. });
  24.  
  25. });

pliku php (fetch_pages.php) nie ma sensu wklejać. Następuje w nim poprostu pobranie z bazy kolejnych div'ów "<div class="item"></div>"
  1. // ajax
  2. <script type="text/javascript">
  3. $(document).ready(function() {
  4.  
  5. var track_click = 0; //track user click on "load more" button, righ now it is 0 click
  6.  
  7. var total_pages = <?php echo $total_pages; ?>;
  8. $('#container').load("fetch_pages.php", {'page':track_click}, function() {track_click++;}); //initial data to load
  9.  
  10. $(".load_more").click(function (e) { //user clicks on button
  11.  
  12. $(this).hide(); //hide load more button on click
  13. $('.animation_image').show(); //show loading image
  14.  
  15. if(track_click <= total_pages) //make sure user clicks are still less than total pages
  16. {
  17. //post page number and load returned data into result element
  18. $.post('fetch_pages.php',{'page': track_click}, function(data) {
  19.  
  20. $(".load_more").show(); //bring back load more button
  21.  
  22. $("#container").append(data); //append data received from server
  23.  
  24. //scroll page to button element
  25. $("html, body").animate({scrollTop: $("#load_more_button").offset().top}, 500);
  26.  
  27. //hide loading image
  28. $('.animation_image').hide(); //hide loading image once data is received
  29.  
  30. track_click++; //user click increment on load button
  31.  
  32. }).fail(function(xhr, ajaxOptions, thrownError) {
  33. alert(thrownError); //alert any HTTP error
  34. $(".load_more").show(); //bring back load more button
  35. $('.animation_image').hide(); //hide loading image once data is received
  36. });
  37.  
  38.  
  39. if(track_click >= total_pages-1)
  40. {
  41. //reached end of the page yet? disable load button
  42. $(".load_more").attr("disabled", "disabled");
  43. }
  44. }
  45.  
  46. });
  47.  
  48. });
  49. </script>

no i button wczytujący ajaxa
  1. <button class="load_more" id="load_more_button" style="position:fixed;bottom:0px;left:50%;">load More</button>
  2. <div class="animation_image" style="display:none;"><img src="ajax-loader.gif"> Loading...</div>


EDIT:
Znalazłem w dokumentacji masonary takie coś:

$('#append').click(function(){ //#append - czyli mój button , więc "#load_more_button"
var $boxes = $( boxMaker.makeBoxes() );
$container.append( $boxes ).masonry( 'appended', $boxes );
});

ponoć to ma rozwiązać, mój problem... tylko jak to powiązać z ajaxem ?


*****************************************************************************

dobra poradziłem sobie....

muszę jeszcze tylko podpiąć dobrze ajaxa.

kod dla potomnych, którzy chcieliby dodać animacje mesonry do wczytywanej grafiki
  1. $(document).ready(function()
  2. {
  3. $(".load_more").click(function(e)
  4. {
  5. var $boxes = $('<div class="item" style="width:400px;height:300px;"></div><div class="item"></div><div class="item"></div><div class="item" style="width:50px;height:150px;"></div><div class="item"></div><div class="item"></div><div class="item" style="width:50px;height:150px;"></div><div class="item"></div><div class="item" style="width:300px;height:180px;"></div><div class="item"></div>');
  6. $('#container').append( $boxes ).masonry( 'appended', $boxes, true );
  7. });
  8.  
  9. });