从jQuery创建动态div时,Masonry.js无法正常工作

时间:2016-02-02 12:50:20

标签: javascript jquery masonry

我正在通过从Free Code Camp获取camper新闻API的链接来创建页面,当我尝试将新闻链接的布局与不同的图像大小对齐时,我无法使masonry.js工作。这是我的代码:

$(document).ready(function() {
  $.getJSON("http://www.freecodecamp.com/news/hot", function(json) {
    var html = ""
    json.forEach(function(val) {
      html += "<div class='grid-item'>";
      html += "<a href='" + val.link + "' target='_blank'>";
      if (val.image === "" || val.image === "undefined") {
        html += "<img src='" + val.author.picture + "'>";
      } else {
        html += "<img src='" + val.image + "'>";
      }
      html += "</a>"
      html += "<p><a href='" + val.link + "' target='_blank'>" + val.headline + "</a></p>"
      html += "<p>" + val.rank + " points</p>";
      html += "</div>"
    });
    $("#camper-news").html(html);
    $(".grid-item:first").removeClass().addClass("grid-sizer")
  });
  $('#camper-news').masonry({
    itemSelector: '.grid-item',
    columnWidth: '.grid-sizer',
    percentPosition: true,
    gutter: 5
  });

});

我在codepen中设置了demo,同时也包含了html和css

我已尝试在提供的文档后使用masonry.js初始化jQuery,但由于某种原因它无效。我已经尝试通过设置断点来调试,我在代码中初始化了砌体并单击“跳过下一个函数调用”。虽然我还是使用Chrome调试工具的新手,但我确实看到它通过了masonry.pkgd.min.js文件,所以我认为我已经正确地初始化了砌体。我还在StackOverflow上查看了与masonry.js相关的其他问题,但我还没有找到解决方案。我想知道是不是因为我已经div加载了jQuery

1 个答案:

答案 0 :(得分:1)

初始化位置错误:

$(document).ready(function() {
  $.getJSON("http://www.freecodecamp.com/news/hot", function(json) {
    var html = ""
    json.forEach(function(val) {
      html += "<div class='grid-item'>";
      html += "<a href='" + val.link + "' target='_blank'>";
      if (val.image === "" || val.image === "undefined") {
        html += "<img src='" + val.author.picture + "'>";
      } else {
        html += "<img src='" + val.image + "'>";
      }
      html += "</a>"
      html += "<p><a href='" + val.link + "' target='_blank'>" + val.headline + "</a></p>"
      html += "<p>" + val.rank + " points</p>";
      html += "</div>"
    });
    $("#camper-news").html(html);
    $(".grid-item:first").removeClass().addClass("grid-sizer")
    $('#camper-news').masonry({
      itemSelector: '.grid-item',
      columnWidth: '.grid-sizer',
      percentPosition: true,
      gutter: 5
    });
  });


});

http://codepen.io/anon/pen/LGBQJK

然后你必须使用图像加载插件 确保所有图像都已加载:

Masonry images overlapping above each other

这是最终的解决方案: http://codepen.io/anon/pen/jWpZXa