Jquery 砖石插件:调整div大小不会导致重新洗牌

Jquery 砖石插件:调整div大小不会导致重新洗牌,jquery,css,layout,jquery-masonry,Jquery,Css,Layout,Jquery Masonry,将砖石项目包装在1000px宽的div中,我有一个按钮,可以使用jQuery的addClass()将div调整为2000x,问题是砖石项目不会重新排列以填充额外的1000px空间,我知道调整大小是有效的,因为调整浏览器窗口的大小会导致重新排列 砌体: $(function(){ $('#container').masonry({ // options itemSelector : '.item', columnWidth : 240

将砖石项目包装在1000px宽的div中,我有一个按钮,可以使用jQuery的
addClass()
将div调整为2000x,问题是砖石项目不会重新排列以填充额外的1000px空间,我知道调整大小是有效的,因为调整浏览器窗口的大小会导致重新排列

砌体:

$(function(){
    $('#container').masonry({
        // options
        itemSelector : '.item',
        columnWidth : 240
    });
});
$("a.button").toggle(function(){
    $(this).addClass("flip");
    $("div#container").fadeOut("fast", function() {
        $(this).fadeIn("fast").addClass("resize");
    });
width: 1000px; /* default */
width: 2000px !important; /* on button press */
按钮:

$(function(){
    $('#container').masonry({
        // options
        itemSelector : '.item',
        columnWidth : 240
    });
});
$("a.button").toggle(function(){
    $(this).addClass("flip");
    $("div#container").fadeOut("fast", function() {
        $(this).fadeIn("fast").addClass("resize");
    });
width: 1000px; /* default */
width: 2000px !important; /* on button press */
CSS:

$(function(){
    $('#container').masonry({
        // options
        itemSelector : '.item',
        columnWidth : 240
    });
});
$("a.button").toggle(function(){
    $(this).addClass("flip");
    $("div#container").fadeOut("fast", function() {
        $(this).fadeIn("fast").addClass("resize");
    });
width: 1000px; /* default */
width: 2000px !important; /* on button press */
我试着运行('a')。使用相同的按钮单击砌体函数,它似乎工作正常,但问题仍然存在


有什么建议吗?我被难住了:/

我认为,当单击“重新调整大小”按钮时,您需要再次运行砌体功能

$("a.button").toggle(function(){
    $(this).addClass("flip");
    $("div#container").fadeOut("fast", function() {
    $(this).fadeIn("fast").addClass("resize");
    // run masonry again
    $('#container').masonry({      
      itemSelector : '.item',
      columnWidth : 240
    });
});

从中,调用
.massy('reloadItems')
将获取(可能是新的)与
itemSelector
匹配的项目并重新定位砖块,但调用
.massy()
将仅根据其项目的最新尺寸重新定位项目。

尝试使用jquery触发调整大小事件:

$(window).trigger('resize');

这对我有用

你有什么办法吗?当单击按钮时,我运行了默认的砌石函数,但问题仍然存在,它只是继承了调整大小之前的情况,除非我调整浏览器窗口的大小:/另外,$(“#container |”).massy(“reload”);也可以实现这一点。这是一种触发重新加载功能的非常糟糕的方法,因为它会导致浏览器重新绘制并触发其他不需要的调整大小侦听器。更不用说它很脆弱,因为massy上的调整大小侦听器可以被禁用。