我将一个带有元素的 div 附加到 DOM,并希望使用砌体来排列这些内部元素。但是,除非我在 setTimeout 回调中初始化砌体,否则砌体会破裂。
// I have a `#media` div in my html
var outerDiv = $('<div>').attr('style', 'width: 720px;');
this.$('#media').append(div);
// I create lots of boxes in a boxes div
var boxes = $('<div>').append(
$('<div>').attr('style', 'width: 160px; height: 180px; margin: 10px 0px; ' +
'background-color: red; float: left;').addClass('item'),
$('<div>').attr('style', 'width: 340px; height: 120px; margin: 10px 0px; ' +
'background-color: red; float: left;').addClass('item'),
$('<div>').attr('style', 'width: 160px; height: 120px; margin: 10px 0px; ' +
'background-color: red; float: left;').addClass('item'),
$('<div>').attr('style', 'width: 160px; height: 180px; margin: 10px 0px; ' +
'background-color: red; float: left;').addClass('item'),
$('<div>').attr('style', 'width: 340px; height: 100px; margin: 10px 0px; ' +
'background-color: red; float: left;').addClass('item'),
$('<div>').attr('style', 'width: 340px; height: 160px; margin: 10px 0px; ' +
'background-color: red; float: left;').addClass('item'),
$('<div>').attr('style', 'width: 160px; height: 180px; margin: 10px 0px; ' +
'background-color: red; float: left;').addClass('item'),
$('<div>').attr('style', 'width: 160px; height: 120px; margin: 10px 0px; ' +
'background-color: red; float: left;').addClass('item')
);
outerDiv.append(boxes);
// without the setTimeout wrapper, this breaks (in Chrome, everything clusters
// in the top left; in Firefox, everything lines up in a column on the left)
setTimeout(function() {
boxes.masonry({
itemSelector: '.item',
columnWidth: 180,
isResizable: true,
});
});
想法?