2013-01-22 28 views
1

我是新来的JavaScript和东西,现在我有一个令人沮丧的问题,石工和无限滚动tumblr。 我已经阅读了几乎所有有关这些问题的论坛问题,但没有解决我的问题。tumblr masonry +无限滚动重叠的帖子,尽管使用desandro和新的jquery

所以,我有一个tumblr博客(http://jessman5.tumblr.com),尽管使用的:

和验证码:

<script> 
$(function(){ 
var container = $('#container'); 

    container.infinitescroll({ 
      navSelector : '.pagination',  
      nextSelector : '.pagination a', 
      itemSelector : '.post', 
      loading: { 
       finishedMsg: 'No more pages to load.', 
       img: 'http://i.imgur.com/6RMhx.gif' 
      } 
     }, 
     function(newElements) { 
      var newElems = $(newElements); 
      newElems.css({ opacity: 0 }); 
      newElems.animate({ opacity: 1 }); 
      container.masonry('appended', newElems); 
     } 
    ); 
    container.imagesLoaded(function(){ 
     container.masonry({ 
      itemSelector: '.post' 
     }); 
    }) 
}); 
</script> 

帖子在加载旧帖子时重叠。 Safari已经做得很好,但Chrome和Firefox完全丢失。

我想这包括:

$(window).load(function(){ 
    $('#container').masonry({ 
    // options... 
    }); 
}); 

这:

container.imagesLoaded(function() { 
     container.masonry({ 
      columnWidth: function (containerWidth) { 
       return containerWidth/100; 
      } 
     }); 
    }); 

和(感觉)数百码其他版本的... 什么的,这是为我工作。

我希望任何人都可以帮助我。 我很沮丧..

回答

1

还好这里是工作的代码:

<script type="text/javascript"> 
$(function(){ 
var container = $('#container'); 

container.imagesLoaded(function(){ 
    container.masonry({ 
     itemSelector : '.post' 
    }); 
}); 

container.infinitescroll({ 
     navSelector : '.pagination',  
     nextSelector : '.pagination a', 
     itemSelector : '.post', 
     loading: { 
      finishedMsg: 'No more pages to load.', 
      img: 'http://i.imgur.com/6RMhx.gif' 
     } 
     }, 
     function(newElements) { 
     var $newElems = $(newElements).css({ opacity: 0 }); 
     $newElems.imagesLoaded(function(){ 
      $newElems.animate({ opacity: 1 }); 
      container.masonry('appended', $newElems, true); 
     }); 
     } 
    ); 
}); 
</script> 

我刚翻了吧?哈哈:D

3

当试图调试代码时,总是检查控制台是否有错误。控制台状态这样的:

cannot call methods on masonry prior to initialization; attempted to call method 'appended' 

我可以看到你正在试图初始化的window.load方法砌筑,但是你infinitescroll代码开火文件准备好,这window.load之前触发。这就是为什么错误仍然存​​在。

尝试在document.ready方法中初始化infinitescroll和masonry,或者在window.load方法中初始化infinitescroll和masonry,并且应该使其运行。例如:

$(function() { 
    $('#container').masonry({ 
     // options 
    }); 

    $('#container').infinitescroll({ 
     // etc 
    }); 
}); 
+0

非常感谢你! :)我解决了我的问题。 我将在稍后回答我自己的问题时发布最终代码。 – Jessman5

+3

需要注意的两件事 - 堆栈溢出的答案可以帮助其他人以及你。所以你不需要不接受答案并发布你的工作代码,因为这与其他人有不同的代码有相同的问题。他们需要了解实际问题_以及如何解决它_这就是我的答案所解释的。此外,请注意,不接受答案会惩罚回答者(又名我),所以如果您打算回答自己的问题,请不要接受/不接受其他答案:) –