使用Masonry、jQuery和PHP制作专辑封面库


Using Masonry, jQuery, and PHP to make an album cover gallery

我读到了关于Masonry的文章,在未能获得图像后,建议切换到后续的同位素。我试图改进或创建专辑封面库的变体,在使用相同的PHP类之前,我已经做过一两次了。

我可以使用基本功能,但单击添加更多图像的按钮总是无法工作。我一直在阅读jQuery文档,我尝试过各种JavaScript调试器,但当我点击时,我总是没有图像被添加到我的库中。

要获得最佳布局,肯定需要反复试验

最大的专辑封面似乎是500像素,API中最小的是75像素,选择合适的列宽有帮助。我目前使用的是75,但50可能会更好。我只想把图像添加到工作中,并完成这个小实验。

我想尝试类似的技术,在底部添加更多的图像。我想添加更多的专辑封面,我从各种API(亚马逊产品API,Last.fm,iTunes)使用PHP获取。所有的专辑封面都来自API,我使用PHP来查找给定专辑标题和艺术家的URL。我的代码正在运行:http://www.muschamp.ca/Muskie/cdCoverGalleryV4.php

我已经多次更改CSS规则,现在我只使用了同位素作者建议的默认CSS。

PHP代码,循环并生成10个div,每个div 有一个图像

$myAlbumCollection->randomMember();
    $count = 0;
    print('<div id="container">');
    while ( $count < 10 )
    {
        // Check that current album is in Amazon 
        $buyLink = $myAlbumCollection->currentAlbumAmazonProductURL();
        $imageURL = $myAlbumCollection->currentAlbumRandomImageURL();
        if ( (strcmp($buyLink, '#') != 0) && (strcmp($imageURL, myInfo::MISSING_COVER_URL) != 0))
        {
            $count++;
            print('<div class="item">'); 
            print('<a href="' . $buyLink . '">');
            print('<img src="' . $imageURL . '" />');
            print('</a>');
            print('</div>');
        }
        $myAlbumCollection->goToNextAlbum(); // This could loop forever if it doesn't find enough album covers, but in reality will timeout 
    }
    print('</div>');

最后是javascript,最后的问题就在这里:

<script>
$(function(){
  var $container = $('#container');

  $('#insert a').click(function(){
    var $newEls = $.get('./moreAlbumCovers.php');
    $container.isotope( 'insert', $newEls );
    return false;
  });
  $container.isotope({
    itemSelector: '.item',
    masonry: {
    columnWidth: 75
    }
  });
});
</script>

点击链接就会被调用,我已经遍历过了。PHP会生成DIV As和IMG标记。我真的不确定我做错了什么,反复阅读文档并不能解决问题。我从来都不是一个真正的JavaScript爱好者。我甚至不是一个PHP的家伙,这似乎是对的,但尽管提供了慷慨的援助和赏金,我还是一再努力让它成功。

谢谢你的帮助。

尝试调整columnWidh的值和item的宽度。砌体将元素和最适合的柱第一布局对齐。它适用于数学方程。因此,一个完美的砖墙配件只是假设的理想情况。我在firebug和其他工具上尝试了几次,才使砖石结构以理想的布局工作。关键是要得到columnWidth和width、gutter等的值,这样它就可以很好地求解逻辑方程。

:编辑::
我发现一个链接保存在我的口袋页面上,我完全忘记了。这是一个很好的教程。所以我回来给它在这里。推荐给所有在开始使用此插件时遇到困难的人。

http://www.netmagazine.com/tutorials/get-started-jquery-masonry

Masonry并不是一个很好的描述性名称。事实上,它是一个优化问题。这是一个被称为np问题的问题,因为有太多的排列需要检查。特别是砖石jquery插件是一个1d装箱求解器,它可以将砖块排列在垂直列中。Css默认情况下按水平顺序排列砖块。换句话说,它是一种深度优先的相邻树模型。

更新:尝试将砖石添加到您的虚拟div并删除其他内容:

           $('#dummy').load('./moreAlbumCovers.php').masonry("reload"); 

我想你想得太多了。变量是空的,因为你把它分配给了一个dom对象。它很可能也变成了一个对象而没有用处。

这里解释得很好Jquery Masonry无缝响应图像网格+我会尝试用同位素做同样的事情http://isotope.metafizzy.co/

编辑:我认为Isotope和砖石只是在整理一维仓包装,而你可能想要的是二维仓包装

像这样http://codeincomplete.com/posts/2011/5/7/bin_packing/example/(检查复杂的情况,它完全适合所有盒子)

并为此自由https://github.com/jakesgordon/bin-packing/

要获得更像砖墙的效果,您不需要使用CSS设置项目宽度。根据这里的说明,这不是很清楚。但许多测试似乎表明,只需指定columnWidth,然后让浏览器和javascript做最好的事情,就可以更接近我想要的性能。将不得不调整并最终尝试附加。。。