使用砌体插件进行Jquery回调

时间:2010-01-27 00:57:48

标签: jquery callback

我有一个基本的切换开关,显示点击的div,同时关闭所有其他类似的div。这很好用,切换不是问题。见下文:

$(document).ready(function(){
 $('.threadWrapper > .littleme').click(function() {
  $(this).next().toggle('slow');
  $(this).toggle('slow');
  $('.littleme').not(this).next().hide('slow');
  $('.littleme').not(this).show('slow');
  return false;
 }).next().hide();
});

我也使用了jQuery的Masonry插件,它可以组织所有选定的div元素,然后垂直地组织。辉煌,适用于各种不同的div高度。见下文:

$(function(){
    $('#mainContent').masonry({
    columnWidth: 200, 
    itemSelector: '.threadWrapper:visible',
});
});

我想要它做的是每次div扩展或折叠时重新组织布局。实际上触发.masonry命令作为初始.click函数的回调。这对我不起作用。适用于初学者的问题。

了解它目前如何在这里工作:kalpaitch.com

安德鲁

Gaby - 感谢语法检查,我非常善于将这些人弄松,然后花了大约半个小时的时间来寻找它们。

Cyro - 完美且有效,我将在不久的将来使用它。我想要添加的是在显示/隐藏/切换这些动画速度的情况下如何实现这一点(上面的代码相应地改变)。然后,在扩展div之前将触发砌体调用(目前正在kalpaitch.com上发生)。非常感谢答案,但这种方式肯定更容易。

4 个答案:

答案 0 :(得分:4)

尝试重新运行砌体调用,在点击更改解决后重新调整页面:

$(document).ready(function(){
 $('.threadWrapper > .littleme').click(function() {
  $(this).next().toggle();
  $(this).toggle();
  $('.littleme').not(this).next().hide();
  $('.littleme').not(this).show();

  // re-run masonry
  $('#mainContent').masonry({
    columnWidth: 200, 
    itemSelector: '.threadWrapper:visible'
  });

  return false;
 }).next().hide();
});
编辑:看看砌体文档,似乎Masonry会保存您的初始设置,因此您只需再次调用main方法。这也应该有效:

$(document).ready(function(){
 $('.threadWrapper > .littleme').click(function() {
  $(this).next().toggle();
  $(this).toggle();
  $('.littleme').not(this).next().hide();
  $('.littleme').not(this).show();

  // re-run masonry
  $('#mainContent').masonry();

  return false;
 }).next().hide();
});

答案 1 :(得分:2)

我也有一个切换,并且无法为此效果重新加载。 但是当物品淡出(过滤)时,我确实得到重新加载。

请参阅:http://jasondaydesign.com/masonry_demo/

答案 2 :(得分:1)

您有一个错误的路径,其中包含masonry.js文件..

你应该使用js/jquery.masonry.js JS/jquery.masonry.js(大写JS)

并且您在传递给砌体的选项末尾有一个额外的逗号(,)..

在您的示例中修复这些错误之后,再次运行砌体代码,就像他在回答中提到的Cryo一样......

答案 3 :(得分:0)

已经有一段时间了,但由于我在搜索其他内容时一直在问你的问题,我在这里补充说Masonry添加了一个.reload函数。这对我有用:

        $(window).resize(function(){
            var wallWidth   = $wall.width();
            var width       = $(window).width();
            if ( width<700 ) {
                    $('.brick').css( 'width', wallWidth/1);
                    $wall.masonry( 'option', { columnWidth: wallWidth/1 });
                    $wall.masonry( 'reload' );
            } else if ( width>=700 && width<1024 ) {
                    $('.brick').css( 'width', wallWidth/2 - 1);
                    $wall.masonry( 'option', { columnWidth: wallWidth/2 });
                    $wall.masonry( 'reload' );
            } else if (width>=1024) {
                    $('.brick').css( 'width', wallWidth/3 - 1);
                    $wall.masonry( 'option', { columnWidth: wallWidth/3 });
                    $wall.masonry( 'reload' );
            }
        });