【问题标题】:Masonry script event on layout initialization布局初始化时的砌体脚本事件
【发布时间】:2013-12-12 13:38:53
【问题描述】:

每次Masonry 脚本重新组织元素时如何执行我的函数,例如当窗口调整大小时? 在这个例子中,它只在第一次工作。

$(document).ready(function()
{
    $('#container').masonry({
     // layoutComplete: masonry_refreshed(), // <-- doesn't work propriety
        itemSelector: '.item'
    });

    masonry_refreshed();
});

function masonry_refreshed()
{
    alert('Masonry refreshed')
}

演示:http://codepen.io/anon/pen/HeuKw

【问题讨论】:

    标签: jquery-masonry


    【解决方案1】:

    检查:http://masonry.desandro.com/events.html 您可以使用以下砌体事件:

    msnry.on( 'layoutComplete', masonry_refreshed );
    

    请注意,msnry 是您定义砌体的变量的名称。


    编辑: 完整的演示代码:

    $(document).ready(function(){
        var container = document.querySelector('#container');
        var msnry = new Masonry(container,{
            itemSelector: '.item',
            columnWidth: 70
        });
    
        msnry.on( 'layoutComplete', masonry_refresh );
    
        function masonry_refresh(){
            console.log("Masonry resized!");
        }
    
    });
    

    演示:http://jsfiddle.net/Cd6ce/1/


    EDIT2:如果你真的想用jQuery的方式来使用它:

    $(document).ready(function(){
        $('#container').masonry({
            itemSelector: '.item',
            columnWidth: 70
        });
        var msnry = $('#container').data('masonry');
        msnry.on( 'layoutComplete', masonry_refresh );
    
        function masonry_refresh(){
            console.log("Masonry resized!");
        }
    
    });
    

    演示:http://jsfiddle.net/Cd6ce/4/

    【讨论】:

    • 对不起不起作用...我已经添加了工作演示codepen.io/anon/pen/HeuKw它仅在第一次发出警报,但在调整窗口大小时不会发出警报。我想我需要在调整窗口大小时创建自己的事件...
    • 或者如果您真的想使用 jQuery 方式,那么您需要使用 var msnry = $container.data('masonry'); 获取您的砌体实例并使用我提供的代码。编辑:添加到答案
    • 感谢 Kristof 的帮助,我发现这个例子在 Opera 中不起作用,但它在 function masonry_refresh() 结尾处与 return true 一起工作
    • jsfiddle.net/vrboooct 有什么问题吗?对我来说似乎更容易阅读。
    【解决方案2】:

    您必须在初始化时禁用“布局”。见:http://masonry.desandro.com/options.html

    msnry = new Masonry( self.el, {
        isInitLayout: false,
        itemSelector: '.brick'
    });
    
    msnry.on( 'layoutComplete', function(){
        console.log('completed');
    });
    
    msnry.layout();
    

    【讨论】:

    • 这对我有用,因为使用事件绑定方法,它只会在窗口调整大小后触发,但不会在启动时触发。此方法也会在启动和调整窗口大小时触发事件。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    相关资源
    最近更新 更多