Masonry.js 从 jQuery 创建动态 div 时不工作
Masonry.js not working when creating dynamic divs from jQuery
我正在通过从 Free Code Camp 的营员新闻 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
我已经尝试按照提供的文档使用 jQuery
初始化 masonry.js
,但由于某种原因无法正常工作。我尝试通过在我的代码中初始化 masonry 的地方设置断点并单击 "step over next function call" 来进行调试。虽然我对使用 Chrome 调试工具还很陌生,但我确实看到它通过 masonry.pkgd.min.js 文件,所以我认为我已经正确初始化了砌体。我也在 Whosebug 上查看了与 masonry.js
相关的其他问题,但我还没有找到解决方案。我想知道是否是因为我用 jQuery
.
加载了 div
s
初始化位置错误:
$(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
那你就得用image loaded plugin了
确保所有图像都已加载:
Masonry images overlapping above each other
这是最终的解决方案:
http://codepen.io/anon/pen/jWpZXa
我正在通过从 Free Code Camp 的营员新闻 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
我已经尝试按照提供的文档使用 jQuery
初始化 masonry.js
,但由于某种原因无法正常工作。我尝试通过在我的代码中初始化 masonry 的地方设置断点并单击 "step over next function call" 来进行调试。虽然我对使用 Chrome 调试工具还很陌生,但我确实看到它通过 masonry.pkgd.min.js 文件,所以我认为我已经正确初始化了砌体。我也在 Whosebug 上查看了与 masonry.js
相关的其他问题,但我还没有找到解决方案。我想知道是否是因为我用 jQuery
.
div
s
初始化位置错误:
$(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
那你就得用image loaded plugin了 确保所有图像都已加载:
Masonry images overlapping above each other
这是最终的解决方案: http://codepen.io/anon/pen/jWpZXa