2013-02-21 25 views
7

Tôi đọc về Masonry và sau khi không nhận được hình ảnh bổ sung để làm việc được khuyên nên chuyển sang Isotope kế thừa. Tôi đã cố gắng cải thiện hoặc tạo ra các biến thể trên một thư viện bìa album, một cái gì đó tôi đã thực hiện một hoặc hai lần trước khi sử dụng cùng một lớp PHP.Sử dụng Masonry, jQuery và PHP để tạo một thư viện bìa album

Tôi có thể làm cho chức năng cơ bản hoạt động, nhưng một nút để nhấp để thêm nhiều hình ảnh hơn đã không hoạt động. Tôi tiếp tục đọc tài liệu jQuery và tôi đã thử nhiều trình gỡ lỗi JavaScript khác nhau nhưng tôi luôn kết thúc mà không có hình ảnh nào được thêm vào thư viện của tôi khi tôi nhấp vào.

Dùng thử và lỗi chắc chắn là bắt buộc để có bố cục đẹp nhất.

Bìa album lớn nhất có vẻ là 500 pixel với nhỏ nhất được tìm thấy trong API là 75, việc chọn chiều rộng cột phù hợp sẽ giúp. Tôi hiện đang sử dụng 75 nhưng 50 có thể đã hoạt động tốt hơn. Tôi chỉ muốn có thêm hình ảnh để làm việc và được thực hiện với thử nghiệm nhỏ này.

Tôi muốn thử một cái gì đó tương tự như điều này technique of appending more images to the bottom. Tôi muốn nối thêm nhiều bìa album mà tôi tìm nạp từ các API khác nhau (Amazon Product API, Last.fm, iTunes) bằng cách sử dụng PHP. Tất cả các bìa album đến từ API và tôi sử dụng PHP để tìm các URL được đặt cho tiêu đề album và nghệ sĩ. Mã của tôi đang chạy: http://www.muschamp.ca/Muskie/cdCoverGalleryV4.php

Tôi đã thay đổi quy tắc CSS nhiều lần, bây giờ tôi chỉ có CSS ​​mặc định được đề xuất bởi tác giả Đồng vị.

PHP Code mà vòng và tạo ra 10 divs với một hình ảnh mỗi 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>'); 

Và cuối cùng ở đây là javascript, vấn đề cuối cùng là ở đây đâu đó:

<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> 

Các liên kết được gọi khi nhấp vào, tôi đã bước qua nó. PHP tạo ra các thẻ DIV và As. Tôi thực sự không chắc chắn những gì tôi đang làm sai và đọc lặp đi lặp lại của tài liệu hướng dẫn không giải quyết nó. Tôi chưa bao giờ thực sự là một anh chàng JavaScript. Tôi thậm chí không phải là một chàng trai PHP, có vẻ như đúng nhưng nỗ lực lặp đi lặp lại để làm cho nó đi đã thất bại mặc dù hỗ trợ hào phóng và cung cấp một tiền thưởng.

Cảm ơn sự giúp đỡ.

+0

Hi Muskie, bạn sẽ làm rõ câu hỏi cụ thể của bạn là gì? – halfer

+1

Điều đó có rõ ràng hơn không? Về cơ bản các mã không công cụ, nhưng không phải là hiệu ứng tường gạch với các thiết lập hiện tại của tôi. Cuối cùng tôi cũng muốn được thêm vào. – Muskie

+0

Tôi tiếp tục đọc hướng dẫn tại đây: http://masonry.desandro.com/demos/basic-multi-column.html và thay đổi mục CSS chiều rộng mục và đối số javascript columnWidth và tôi tiếp tục nhận được hai cột và nhiều khoảng trắng trong trình duyệt của tôi ... – Muskie

Trả lời

4

Thử điều chỉnh giá trị columnWidh và chiều rộng item. Masonry căn chỉnh phần tử với bố cục đầu tiên phù hợp nhất với cột. Nó hoạt động trên các phương trình toán học. Vì vậy, một hoàn hảo, ốp tường phù hợp chỉ là trường hợp lý tưởng giả thuyết. Nó đưa tôi một vài cố gắng trên firebug và các công cụ khác để có được nề làm việc với bố trí lý tưởng được trang bị. Điều quan trọng là để có được giá trị của columnWidth và chiều rộng, máng xối vv trong một cách mà nó giải quyết các phương trình logic trong các giá trị tốt.

:: EDIT ::
Tôi tìm thấy một liên kết được lưu trong trang túi của tôi, trong đó tôi hoàn toàn quên. Đó là một hướng dẫn tuyệt vời. Vì vậy, tôi đã trở lại để cung cấp cho nó ở đây. Được đề xuất cho mọi người gặp sự cố khi bắt đầu với plugin này.

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

+0

Tôi đã thử rất nhiều giá trị và tôi bắt đầu thấy hành vi mà tôi mong đợi với tôi không có chiều rộng mục trong quy tắc CSS mà tôi phải nhập vào cùng lúc với câu trả lời của bạn mặc dù có thể tôi đã 57 phút sau đó. ;-) – Muskie

+0

Cảm ơn tôi sẽ kiểm tra liên kết. Tôi vẫn không hiểu làm thế nào để nối thêm. – Muskie

+0

Nối cái gì ?? Có một bản demo để thêm các phần tử mới trên trang web xây dựng. –

2

Để có được bức tường gạch giống như tác dụng bạn không đặt một chiều rộng mục sử dụng CSS. Đây không phải là pha lê rõ ràng được đưa ra the instructions here. Nhưng rất nhiều thử nghiệm dường như chỉ ra rằng chỉ cần chỉ định một columnWidth và sau đó cho phép trình duyệt và javascript làm tốt nhất là gần gũi hơn với hiệu suất tôi đang tìm kiếm.Sẽ phải tinh chỉnh và cuối cùng thử thêm ...

3

Không phải là tên mô tả cho nó. Trong thực tế nó là một vấn đề tối ưu. Đó là một cái gì đó được gọi là vấn đề np bởi vì có quá nhiều hoán vị để kiểm tra. Đặc biệt là plugin jquery nề là một bộ giải nén thùng rác 1d và nó sắp xếp các viên gạch theo các cột dọc. Css theo mặc định sắp xếp các viên gạch theo thứ tự ngang. Nói cách khác, đó là một kiểu đầu tiên theo chiều sâu của một mô hình cây liền kề.

Cập nhật: Thử thêm nề tới div giả của bạn và xóa everthing khác:

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

Tôi nghĩ rằng bạn overthink nó. Biến này trống vì bạn gán nó cho đối tượng dom. Nó rất có thể cũng trở thành một đối tượng và không hữu ích.

+0

Cảm ơn, tôi nghĩ tôi cần tìm hiểu thêm về jQuery và JavaScript để giải quyết vấn đề này, hoặc là tôi hoàn toàn không nhận được phụ thêm. Tôi hiểu nề không phải là hoàn hảo, tôi cho nó những hình ảnh có kích thước ngẫu nhiên từ các API mà nó làm tốt nhất có thể. Một số tiền nhất định của thử nghiệm và lỗi là cần thiết để có được chiều rộng đúng. – Muskie

+0

Tôi đã cập nhật câu trả lời của mình. Chúc may mắn! – Bytemain

+0

Tôi chỉ thêm div #dummy vì tôi không thể gọi tải trên vùng chứa ... Tôi sẽ thử điều này nhưng có vẻ như nó sẽ không nối thêm, thay vào đó nó sẽ thay thế lưới của tôi bằng một lưới khác ... – Muskie

3

Nó relly cũng giải thích ở đây Jquery Masonry Seamless Responsive Image Grid + Tôi sẽ cố gắng làm giống hệt nhau với đồng vị http://isotope.metafizzy.co/

chỉnh sửa: Tôi nghĩ isoptope và nề chỉ phân loại ra 1 chiều đóng gói bin, và những gì bạn đang có lẽ tìm kiếm sau là 2 bin chiều đóng gói

như thế này http://codeincomplete.com/posts/2011/5/7/bin_packing/example/ (kiểm tra trường hợp phức tạp nó phù hợp với tất cả các hộp hoàn hảo)

và lib cho rằng https://github.com/jakesgordon/bin-packing/

+0

Vì vậy, đề xuất của bạn là chuyển sang đồng vị hoặc một Javascript khác? Tôi vẫn nghĩ rằng những gì tôi đang cố gắng để làm có thể được thực hiện với Masonry nó có vẻ phù hợp với các ví dụ và không giống với cách bố trí của Pinterest. Pinterest có tất cả các ô có cùng chiều rộng, đó là chiều cao thay đổi. Tôi nhận được hình ảnh có kích thước ngẫu nhiên mặc dù tôi biết kích thước lớn nhất và nhỏ nhất là bao nhiêu. – Muskie

+0

Vấn đề của bạn rất khác so với chiều rộng cột không cố định. Bạn có thể cố gắng để có 1x 2x 4x chiều rộng (với sức mạnh của hai nó có thể làm việc), nếu không nó sẽ không xin lỗi. Tôi đang nghĩ rằng cố gắng đồng vị sẽ có kết quả tương tự (xin lỗi), bin_packing sẽ hoạt động, nhưng có thể cần tích hợp nhiều hơn, và bin_packing lib phù hợp với hộp lớn nhất trước và cũng có thể không phải là thứ bạn muốn. Nếu bạn muốn lưu trữ một cái gì đó tương tự như chiều rộng cột thiết lập pinterest đến một giá trị, và chỉ làm một số thao tác chiều cao. Bạn có thể thay đổi kích thước hình ảnh và chỉ có một chiều rộng. –

+0

Tôi không cần sự hoàn hảo, tôi chỉ đang cố gắng tìm một cách mới và thú vị để hiển thị bộ sưu tập hồ sơ của mình. Tôi lấy tất cả các bìa album từ các API khác nhau (Amazon, Last.fm, iTunes, v.v.) để mỗi người dùng sử dụng các kích thước hơi khác nhau. Tôi có thể buộc các trình duyệt để thay đổi kích cỡ chúng hoặc tôi có thể thay đổi kích cỡ chúng bản thân mình với PHP nhưng điều đó sẽ chỉ làm chậm những thứ xuống ... Cảm ơn bạn đã cố gắng giúp đỡ. Tôi sẽ sớm xem xét nó. – Muskie