Phiên bản 2.x


Cách sử dụng cơ bản

Tải các tệp Gridzy lên máy chủ của bạn và thêm chúng vào trang web của bạn (thường là ở phần đầu):

<link rel="stylesheet" href="gridzy/gridzy.min.css" />
<script src="gridzy/gridzy.min.js"></script>

Thêm mã HTML (bất cứ nơi nào trong phần nội dung):

<div class="gridzy">
  <img src="https://loremflickr.com/640/480?random=1" alt="a random image" />
  <img src="https://loremflickr.com/480/640?random=2" alt="another random image" />
  <img src="https://loremflickr.com/640/640?random=3" alt="yet another random image" />
  <img src="https://loremflickr.com/640/480?random=4" alt="a random image again" />
  <img src="https://loremflickr.com/640/480?random=5" alt="one last random image" />
</div>

Vậy là xong! Đây là ví dụ đầy đủ chức năng. Không cần khởi tạo thêm.

Cấu hình

Cách dễ nhất để cấu hình Gridzy là chỉ sử dụng các thuộc tính HTML. Bạn chỉ cần thêm tiền tố data-gridzy- vào tên tùy chọn. Vì vậy, để thiết lập tùy chọn spaceBetween , chỉ cần thêm thuộc tính data-gridzy-spaceBetween .

<div class="gridzy" data-gridzy-spaceBetween="20" data-gridzy-desiredHeight="400">
  <img src="https://loremflickr.com/640/480?random=1" alt="a random image" />
  <img src="https://loremflickr.com/480/640?random=2" alt="another random image" />
  <img src="https://loremflickr.com/640/640?random=3" alt="yet another random image" />
  <img src="https://loremflickr.com/640/480?random=4" alt="a random image again" />
  <img src="https://loremflickr.com/640/480?random=5" alt="one last random image" />
</div>

Tùy chọn chính

Giá trị mặc địnhSự miêu tả
animatetrueXác định xem có nên sử dụng hoạt ảnh khi lưới thay đổi hay không (ví dụ: khi thay đổi kích thước cửa sổ trình duyệt hoặc khi thiết lập bộ lọc).
layoutjustifiedXác định bố cục được sử dụng. Gridzy.js 2 hỗ trợ hai bố cục khác nhau justified và waterfall . Mỗi bố cục có các tham số tùy chọn bổ sung riêng, bạn có thể tìm thấy bên dưới bảng này.
filter*Xác định hình ảnh nào sẽ được hiển thị. Bất kỳ bộ chọn CSS nào cũng có thể được sử dụng làm giá trị ở đây. Thường được đặt tự động thông qua filterControls (xem tùy chọn tiếp theo).
Kiểm tra Bộ lọc
filterControlsXác định phần tử biểu mẫu nào có thể được sử dụng để lọc hình ảnh. Bất kỳ bộ chọn CSS nào, chọn phần tử biểu mẫu HTML, đều có thể được sử dụng làm giá trị ở đây.
Kiểm tra Bộ lọc
autoConsiderScrollBarstrueĐể dự đoán chiều rộng khả dụng nếu thanh cuộn xuất hiện hoặc biến mất. Luôn nên để ở chế độ true trừ khi tính năng tự động này gây ra sự cố.

Justified Tùy chọn bố trí

Giá trị mặc địnhSự miêu tả
autoFontSizefalseTự động cập nhật thuộc tính font-size của mỗi hộp dựa trên kích thước hộp ban đầu. Theo mặc định, thuộc tính font-size không được thiết lập rõ ràng.
desiredHeight190Xác định chiều cao mong muốn của các hàng phần tử. Chiều cao thực tế sẽ được tính toán tùy thuộc vào chiều rộng có sẵn và các phần tử trong hàng.
hideOnMissingImagetrueẨn các hộp chứa hình ảnh không thể tải được.
spaceBetween4Xác định khoảng cách giữa các phần tử tính bằng pixel.
lastRowAlign
kể từ phiên bản 2.3.0
justifiedXác định hành vi của hàng cuối cùng. Các giá trị được phép là left , center , right và justified .
singleRowAlign
kể từ phiên bản 2.3.0
justifiedXác định hành vi nếu chỉ có một hàng duy nhất. Các giá trị được phép là left , center , right và justified .
fillLastRow
kể từ phiên bản 2.1.0
trueĐÃ XÓA kể từ phiên bản 2.4.0 (KHÔNG CÒN SỬ DỤNG kể từ phiên bản 2.3.0 )
Sắp xếp hình ảnh sao cho hàng cuối cùng luôn được điền đầy đủ. Nếu bạn định thêm hình ảnh động, bạn nên hủy kích hoạt tùy chọn này.
Không có tác dụng trên các hàng đơn lẻ (xem fillSingleRow ).
fillSingleRow
kể từ phiên bản 2.1.0
trueĐÃ XÓA kể từ phiên bản 2.4.0 (KHÔNG CÒN SỬ DỤNG kể từ phiên bản 2.3.0 )
Nếu chỉ có một hàng, nó sẽ sắp xếp các hình ảnh sao cho hàng đó luôn được lấp đầy hoàn toàn. Nếu bạn chỉ có một hoặc hai hình ảnh trong thư viện, bạn có thể tắt tính năng này.

Waterfall Tùy chọn bố trí

Giá trị mặc địnhSự miêu tả
autoFontSizefalseTự động cập nhật thuộc tính font-size của mỗi hộp dựa trên kích thước hộp ban đầu. Theo mặc định, thuộc tính font-size không được thiết lập rõ ràng.
desiredWidth250Xác định chiều rộng mong muốn của các cột. Chiều rộng thực tế sẽ được tính toán tùy thuộc vào chiều rộng có sẵn và số lượng cột.
hideOnMissingImagetrueẨn các hộp chứa hình ảnh không thể tải được.
horizontalOrderfalseXác định rằng các phần tử được đặt nghiêm ngặt một phần tử trong mỗi cột từ trái sang phải, sau đó bắt đầu lại ở cột bên trái nhất, không phụ thuộc vào cột nào có vị trí cao hơn. Theo mặc định, các phần tử sẽ luôn được đặt ở cột có chiều cao nhỏ nhất.
spaceBetween4Xác định khoảng cách giữa các phần tử tính bằng pixel.
singleRowAlign
since version 2.7.0
justifiedDefines the behavior when not all columns can be filled due to too few images. Allowed values are left, center, right and justified.

Tùy chọn nâng cao hơn

Để biết thêm các tùy chọn nâng cao, hãy xem API .

HTML ngữ nghĩa

Cấu trúc HTML đơn giản nhất của Gridzy là:

<div class="gridzy">
  <img src="https://loremflickr.com/640/480?random=1" alt="a random image" />
  <img src="https://loremflickr.com/480/640?random=2" alt="another random image" />
  <img src="https://loremflickr.com/640/640?random=3" alt="yet another random image" />
  <img src="https://loremflickr.com/640/480?random=4" alt="a random image again" />
  <img src="https://loremflickr.com/640/480?random=5" alt="one last random image" />
</div>

Tuy nhiên, Gridzy rất linh hoạt và bạn có thể sử dụng hầu như bất kỳ cấu trúc HTML nào khác. Chỉ có một vài điểm cần cân nhắc:

  • Mỗi phần tử con của phần tử chứa đại diện cho một mục trong lưới.
  • Cả phần tử container và phần tử con của nó đều có thể là bất kỳ loại thẻ nào, chẳng hạn như ul và li (chỉ cần cân nhắc đặt lại mặc định của trình duyệt).
  • Nếu phần tử img không phải là phần tử con trực tiếp thì nó cần có lớp gridzyImage .

Vì vậy, đây cũng là một cấu trúc HTML đang hoạt động:

<ul class="gridzy">
  <li>
    <span>
      <img class="gridzyImage" src="https://loremflickr.com/640/480?random=1" alt="a random image" />
    </span>
  </li>
  <li>
    <span>
      <img class="gridzyImage" src="https://loremflickr.com/480/640?random=2" alt="another random image" />
    </span>
  </li>
  <li>
    <span>
      <img class="gridzyImage" src="https://loremflickr.com/640/640?random=3" alt="yet another random image" />
    </span>
  </li>
  <li>
    <span>
      <img class="gridzyImage" src="https://loremflickr.com/640/480?random=4" alt="a random image again" />
    </span>
  </li>
  <li>
    <span>
      <img class="gridzyImage" src="https://loremflickr.com/640/480?random=5" alt="one last random image" />
    </span>
  </li>
</ul>

Đặc biệt nếu bạn muốn thêm chú thích, bạn cần một cấu trúc HTML nâng cao. Để tìm hiểu thêm về nó, hãy xem Captions & Skins .

Chú thích & Giao diện

Nếu bạn muốn thêm chú thích vào thư viện của mình, bạn cần phải xác định giao diện. Do đó, một số giao diện được xác định trước có sẵn. Mỗi giao diện bao gồm một tệp CSS. Bạn cần thêm tệp này ngoài các tệp Gridzy chính (thường ở phần đầu):

<link rel="stylesheet" href="gridzy/skins/gridzySkinClassic/style.min.css" />

Ngoài ra, bạn cần có cấu trúc HTML nâng cao:

<div class="gridzy gridzySkinClassic">
  <figure>
    <img class="gridzyImage" src="https://loremflickr.com/640/480?random=1" alt="a random image" />
    <figcaption class="gridzyCaption">a caption text</figcaption>
  </figure>
  <figure>
    <img class="gridzyImage" src="https://loremflickr.com/480/640?random=2" alt="another random image" />
    <figcaption class="gridzyCaption">another caption text</figcaption>
  </figure>
  <figure>
    <img class="gridzyImage" src="https://loremflickr.com/640/640?random=3" alt="yet another random image" />
    <figcaption class="gridzyCaption">yet another caption text</figcaption>
  </figure>
  <figure>
    <img class="gridzyImage" src="https://loremflickr.com/640/480?random=4" alt="a random image again" />
    <figcaption class="gridzyCaption">a caption text again</figcaption>
  </figure>
  <figure>
    <img class="gridzyImage" src="https://loremflickr.com/640/480?random=5" alt="one last random image" />
    <figcaption class="gridzyCaption">one last caption text</figcaption>
  </figure>
</div>

Nếu bạn thắc mắc về cấu trúc HTML, hãy tham khảo Semantic HTML .

Đối với chú thích, bạn có thể sử dụng bất kỳ loại thẻ nào, chỉ cần đảm bảo nó có lớp gridzyCaption . Phần tử img cần có lớp gridzyImage .

Ví dụ trên cho bạn thấy skin gridzySkinClassic . Để sử dụng skin khác, chỉ cần thay thế tên skin bằng một trong những tên sau:

Bao gồm Skins

Các lớp học có sẵn
gridzySkinTrống
một điểm khởi đầu tốt để tạo ra một làn da riêng
xem trước trực tiếp
gridzySkinBlank
gridzySkinClassic
xem trước trực tiếp
gridzySkinClassic
gridzySkinClassicLight(KHÔNG CÒN SỬ DỤNG kể từ phiên bản 2.6.0)
gridzySkinFullOverlay
xem trước trực tiếp
gridzySkinFullOverlay
gridzySkinFullOverlayLight(KHÔNG CÒN SỬ DỤNG kể từ phiên bản 2.6.0)
gridzySkinLift
xem trước trực tiếp
gridzySkinLift
gridzySkinLiftLight(KHÔNG CÒN SỬ DỤNG kể từ phiên bản 2.6.0)
gridzySkinMagnifier
chức năng thu phóng không được bao gồm
xem trước trực tiếp
gridzySkinMagnifier
gridzySkinMagnifierLight(KHÔNG CÒN SỬ DỤNG kể từ phiên bản 2.6.0)

Tất cả các giao diện trên chỉ cần một tệp CSS, nhưng có những giao diện bổ sung cũng yêu cầu một tệp JavaScript:

<link rel="stylesheet" href="gridzy/skins/gridzySkinBlur/style.min.css" />
<script src="gridzy/skins/gridzySkinBlur/script.min.js"></script>
Các lớp học có sẵn
gridzySkinBlur
không hoạt động trong IE
xem trước trực tiếp
gridzySkinBlur
gridzySkinBlurLight(KHÔNG CÒN SỬ DỤNG kể từ phiên bản 2.6.0)
gridzySkinCard
xem trước trực tiếp
gridzySkinCard
gridzySkinCardLight(KHÔNG CÒN SỬ DỤNG kể từ phiên bản 2.6.0)

Tùy chọn da

Từ phiên bản 2.6.0, có các Tùy chọn để cấu hình giao diện tích hợp. Tùy thuộc vào giao diện cụ thể, bạn có thể đặt màu nền, màu chữ và bóng chữ. Bạn chỉ cần sử dụng các thuộc tính tùy chỉnh CSS như bạn có thể thấy ở đây:

<div class="gridzy gridzySkinClassic" style="--background: rgba(0, 80, 117, .8); --color: rgb(238, 238, 238); ">
  <figure>
    <img class="gridzyImage" src="https://loremflickr.com/640/480?random=1" alt="a random image" />
    <figcaption class="gridzyCaption">a caption text</figcaption>
  </figure>
  <figure>
    <img class="gridzyImage" src="https://loremflickr.com/480/640?random=2" alt="another random image" />
    <figcaption class="gridzyCaption">another caption text</figcaption>
  </figure>

  ...

</div>

Kiểm tra các biến được hỗ trợ và giá trị mặc định cho từng giao diện tại đây:

gridzySkinClassic
Biến đổiGiá trị mặc địnhThông tin
--backgroundrgba(0, 0, 0, .7)cho phép bất kỳ giá trị nền CSS nào
--colorrgb(255, 255, 255)cho phép bất kỳ giá trị màu CSS nào
--text-shadownonecho phép bất kỳ giá trị bóng văn bản CSS nào
gridzySkinFullOverlay
Biến đổiGiá trị mặc địnhThông tin
--backgroundrgba(0, 0, 0, .7)cho phép bất kỳ giá trị nền CSS nào
--colorrgb(255, 255, 255)cho phép bất kỳ giá trị màu CSS nào
--text-shadownonecho phép bất kỳ giá trị bóng văn bản CSS nào
gridzySkinLift
Biến đổiGiá trị mặc địnhThông tin
--backgroundrgba(0, 0, 0, .7)cho phép bất kỳ giá trị nền CSS nào
--colorrgb(255, 255, 255)cho phép bất kỳ giá trị màu CSS nào
--text-shadow0 0 10px rgb(0, 0, 0), 0 0 20px rgb(0, 0, 0), 0 0 30px rgb(0, 0, 0)cho phép bất kỳ giá trị bóng văn bản CSS nào
gridzySkinMagnifier
Biến đổiGiá trị mặc địnhThông tin
--backgroundrgba(0, 0, 0, .7)cho phép bất kỳ giá trị nền CSS nào
--colorrgb(255, 255, 255)cho phép bất kỳ giá trị màu CSS nào

Giao diện này không hỗ trợ --text-shadow

gridzySkinBlur
Biến đổiGiá trị mặc địnhThông tin
--backgroundrgba(0, 0, 0, .7)cho phép bất kỳ giá trị nền CSS nào
--colorrgb(255, 255, 255)cho phép bất kỳ giá trị màu CSS nào
--text-shadow0 0 10px rgb(0, 0, 0)cho phép bất kỳ giá trị bóng văn bản CSS nào
gridzySkinCard
Biến đổiGiá trị mặc địnhThông tin
--backgroundrgba(0, 0, 0, 1)cho phép bất kỳ giá trị nền CSS nào
--colorrgb(255, 255, 255)cho phép bất kỳ giá trị màu CSS nào
--text-shadownonecho phép bất kỳ giá trị bóng văn bản CSS nào

Tất cả các giao diện được xác định trước chỉ hỗ trợ chú thích văn bản đơn giản. Bạn có thể tạo giao diện phức tạp hơn và riêng của mình. Vui lòng xem Style Gridzy .

Phong cách Gridzy

Nếu không có giao diện nào phù hợp với nhu cầu của bạn, bạn có thể tự tạo giao diện cho riêng mình.

Cách dễ nhất là trước tiên hãy sao chép một giao diện hiện có và điều chỉnh theo nhu cầu của riêng bạn. Giao diện được xác định trước gridzySkinBlank thường cung cấp một nền tảng tốt cũng như một tài liệu hướng dẫn tốt trong tệp CSS:

/** SKIN Blank **/

/* all gallery items (direct children of the main container element) */
.gridzySkinBlank > .gridzyItem {
  overflow: hidden;
}

/* all gallery images (predefined in Gridzy's main CSS file, but can be overridden) */
.gridzySkinBlank .gridzyImage {
}

/* all gallery captions (just create your very own style) */
.gridzySkinBlank .gridzyCaption {
  margin: 0;
  padding: .5em;
  opacity: 0;
  display: flex;
  justify-content: center;
  align-items: center;
  text-align: center;
  position: absolute;
  z-index: 1;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  box-sizing: border-box;
  transition: opacity .5s;
  overflow: auto;
  background: rgba(0, 0, 0, .7);
  color: rgb(255, 255, 255);
}

.gridzySkinBlank > .gridzyItem:hover .gridzyCaption {
  opacity: 1;
}

Trong tệp CSS, bạn sẽ tìm thấy các lớp gridzySkinBlank , gridzyImage và gridzyCaption . Bản thân Gridzy không cần các lớp này. Chúng chỉ được sử dụng để tạo kiểu và do đó bạn có thể xóa hoặc đổi tên chúng nếu muốn.

Ngoài ra, bạn sẽ tìm thấy lớp CSS gridzyItem . Gridzy tự động thiết lập lớp này cho tất cả các phần tử con trực tiếp của phần tử chứa chính. Vì vậy, bạn có thể sử dụng lớp này để định dạng các mục trong thư viện của mình.

Tâm trí những điều quan trọng

  1. Nội dung mục phải phản hồi đầy đủ. Hãy cân nhắc rằng kích thước phần tử chắc chắn sẽ thay đổi. Sử dụng giá trị phần trăm thay vì giá trị pixel. Và hãy xem tùy chọn bố cục Gridzy autoFontSize , tùy chọn này liên kết kích thước phông chữ với kích thước hộp mục.
  2. Mỗi mục phải có tỷ lệ khung hình được xác định rõ ràng. Tỷ lệ khung hình của mục sẽ không bao giờ thay đổi và cần thiết để tính toán lưới. Vì vậy, nếu một mục không tự động có tỷ lệ khung hình được xác định rõ ràng, hãy xác định trước theo cách thủ công (ví dụ thông qua css).

Trong một số trường hợp, có thể dễ dàng hơn khi định kiểu nội dung của các mục trước khi Gridzy khởi tạo. Chỉ cần xóa tạm thời lớp gridzy hoặc tệp javascript Gridzy cho mục đích này.

Vậy là xong! Đó là tất cả những gì bạn cần để tạo ra giao diện của riêng mình. Hầu hết các giao diện được xác định trước không sử dụng nhiều hơn thế này.

Nhưng có thể còn nhiều hơn nữa nếu bạn thích…

Skin nâng cao

Gridzy sử dụng nhiều lớp CSS hơn là chỉ gridzyItem . Hầu hết chúng sẽ được thiết lập tự động và bạn cũng có thể sử dụng chúng để tạo kiểu.

Các lớp Container chính

Tên lớpSự miêu tả
gridzy
để thiết lập thủ công
Gridzy tự động tìm các phần tử có lớp này và khởi tạo chúng.
gridzyAnimatedSẽ được thiết lập tự động nếu tùy chọn animate là true . Nếu lớp này được thiết lập thủ công, tùy chọn animate cũng sẽ tự động trở thành true (trừ khi nó được thiết lập rõ ràng là false ).

Lớp vật phẩm

Tên lớpSự miêu tả
gridzyItemSẽ được thiết lập ngay khi mục bắt đầu quá trình khởi tạo. Sẽ không bao giờ bị xóa.
gridzyItemInitializingSẽ được thiết lập ngay khi mục bắt đầu quá trình khởi tạo. Sẽ được thay thế bằng gridzyItemReady ngay khi mục được khởi tạo hoàn toàn. Không có nghĩa là hình ảnh được tải đầy đủ (xem gridzyItemLoading ), nhưng mục đã sẵn sàng để hiển thị.
gridzyItemReadySẽ thay thế gridzyItemInitializing ngay khi mục được khởi tạo hoàn toàn. Sẽ không bao giờ bị xóa. Không có nghĩa là hình ảnh được tải đầy đủ (xem gridzyItemComplete ), nhưng mục đã sẵn sàng để hiển thị.
gridzyItemLoadingSẽ được thiết lập ngay khi mục bắt đầu quá trình khởi tạo. Sẽ được thay thế bằng gridzyItemComplete ngay khi các hình ảnh được chứa (thường chỉ có một) được tải đầy đủ.
gridzyItemCompleteSẽ thay thế gridzyItemLoading ngay khi các hình ảnh được chứa (thường chỉ có một) được tải đầy đủ. Sẽ không bao giờ bị xóa.
gridzyItemInitialToVisibleSẽ được thiết lập ngay khi mục bắt đầu xuất hiện lần đầu tiên. Sẽ bị xóa ngay khi mục hiển thị hoàn toàn.
gridzyItemVisibleSẽ được thiết lập ngay khi mục đó hiển thị đầy đủ. Sẽ được xóa ngay khi mục đó bắt đầu biến mất.
gridzyItemVisibleToHiddenSẽ được thiết lập ngay khi vật phẩm bắt đầu biến mất. Sẽ được xóa ngay khi vật phẩm bị ẩn hoàn toàn.
gridzyItemHiddenSẽ được thiết lập ngay khi mục được ẩn hoàn toàn. Sẽ được xóa ngay khi mục bắt đầu xuất hiện.
gridzyItemHiddenToVisibleSẽ được thiết lập ngay khi mục bắt đầu xuất hiện (trừ khi xuất hiện lần đầu tiên – xem lớp gridzyItemInitialToVisible ). Sẽ bị xóa ngay khi mục hiển thị hoàn toàn.
gridzyItemVisibleToVisibleSẽ được thiết lập ngay khi có thứ gì đó trong lưới thay đổi, nhưng bản thân mục đó vẫn hiển thị. Sẽ bị xóa ngay khi hoạt ảnh thay đổi hoàn tất.

Theo mặc định, chỉ báo quy trình và hoạt ảnh để hiện và biến mất hình ảnh được xác định trước bởi tệp CSS chính của Gridzy.

Với các lớp CSS được đề cập ở trên, bạn có thể định dạng chỉ báo quy trình và hoạt ảnh của riêng mình. Hãy thử xem tệp CSS chính của Gridzy để hiểu những gì bạn phải ghi đè. Đừng lo, mọi thứ đều được ghi chép đầy đủ ở đó.

Tối ưu hóa tải

Nếu bạn sử dụng nhiều hình ảnh, bạn có thể giúp Gridzy xây dựng lưới nhanh hơn.

Ngăn chặn hình ảnh nhảy

Gridzy hoàn toàn cần tỷ lệ khung hình của tất cả các hình ảnh để tính toán lưới. Thực tế này dẫn đến các thành phần nhảy nếu một số hình ảnh đã sẵn sàng và một số khác thì chưa. Càng có nhiều hình ảnh, hiệu ứng này càng khó chịu.

Để ngăn chặn hành vi này, chỉ cần đặt thuộc tính width và height cho tất cả các phần tử img . Điều quan trọng là phải đặt đúng giá trị cho từng hình ảnh riêng lẻ, nếu không hình ảnh sẽ bị méo. Các giá trị đúng là chiều rộng và chiều cao ban đầu của từng hình ảnh:

<div class="gridzy">
  <img src="https://loremflickr.com/640/480?random=1" width="640" height="480" alt="a random image" />
  <img src="https://loremflickr.com/480/640?random=2" width="480" height="640" alt="another random image" />
  <img src="https://loremflickr.com/640/640?random=3" width="640" height="640" alt="yet another random image" />
  <img src="https://loremflickr.com/640/480?random=4" width="640" height="480" alt="a random image again" />
  <img src="https://loremflickr.com/640/480?random=5" width="640" height="480" alt="one last random image" />
</div>

Sau đó, Gridzy có thể tính toán lưới ngay lập tức mà không cần biết kích thước thực tế của hình ảnh.

Tải chậm

Để chỉ tải những hình ảnh có trong khung nhìn hiển thị, hãy làm theo các bước sau:

  1. Chèn các thuộc tính width và height như mô tả ở trên (đảm bảo sử dụng các giá trị chính xác)
  2. Thay thế tất cả các thuộc tính src bằng data-gridzylazysrc như hiển thị bên dưới (nếu bạn cũng có thuộc tính srcset , hãy thay thế chúng bằng data-gridzylazysrcset ).
<div class="gridzy">
  <img data-gridzylazysrc="https://loremflickr.com/640/480?random=1" width="640" height="480" alt="a random image" />
  <img data-gridzylazysrc="https://loremflickr.com/480/640?random=2" width="480" height="640" alt="another random image" />
  <img data-gridzylazysrc="https://loremflickr.com/640/640?random=3" width="640" height="640" alt="yet another random image" />
  <img data-gridzylazysrc="https://loremflickr.com/640/480?random=4" width="640" height="480" alt="a random image again" />
  <img data-gridzylazysrc="https://loremflickr.com/640/480?random=5" width="640" height="480" alt="one last random image" />
</div>

Sau các bước này, hình ảnh sẽ được tải ngay khi chúng ở gần hoặc bên trong khung nhìn.

Chỉ số quy trình

Chỉ báo quy trình là biểu tượng hoạt hình nhỏ xuất hiện khi hình ảnh đang tải. Nếu bạn sử dụng chú thích & giao diện , chỉ báo quy trình sẽ tự động hiển thị. Nếu không, bạn cần một số điều chỉnh:

  1. Đặt mỗi phần tử img vào một phần tử div
    (hoặc vào bất kỳ phần tử nào khác – xem HTML ngữ nghĩa để biết thêm)
  2. Thêm lớp gridzyImage vào mỗi phần tử img
<div class="gridzy">
  <div><img src="https://loremflickr.com/640/480?random=1" class="gridzyImage" alt="a random image" /></div>
  <div><img src="https://loremflickr.com/480/640?random=2" class="gridzyImage" alt="another random image" /></div>
  <div><img src="https://loremflickr.com/640/640?random=3" class="gridzyImage" alt="yet another random image" /></div>
  <div><img src="https://loremflickr.com/640/480?random=4" class="gridzyImage" alt="a random image again" /></div>
  <div><img src="https://loremflickr.com/640/480?random=5" class="gridzyImage" alt="one last random image" /></div>
</div>

Sau đó, bạn sẽ thấy các chỉ báo quá trình nếu hình ảnh mất nhiều thời gian để tải.

Bộ lọc

Bộ lọc trong Gridzy khá đơn giản nhưng mạnh mẽ. Bất kể bạn cần loại bộ lọc nào, rất có thể nó sẽ khả thi. Tất cả những gì bạn cần là một chút CSS và một vài thành phần biểu mẫu HTML …

Sau đây là một ví dụ thực tế:

<div id="myFilterControls">
  <button value="*">All</button>
  <button value=".animals">Animals</button>
  <button value=".architecture">Architecture</button>
  <button value=".people">People</button>
</div>

<div class="gridzy" data-gridzy-filterControls="#myFilterControls button">
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=1" alt="a random animal image" />
  <img class="architecture" src="https://loremflickr.com/640/480/arch?random=1" alt="a random architecture image" />
  <img class="people" src="https://loremflickr.com/640/480/people?random=1" alt="a random people image" />
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=2" alt="another random animal image" />
  <img class="architecture" src="https://loremflickr.com/640/480/arch?random=2" alt="another random architecture image" />
  <img class="people" src="https://loremflickr.com/640/480/people?random=2" alt="another random people image" />
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=3" alt="yet another random animal image" />
</div>

Hãy xây dựng từng bước một

1. Đầu tiên, chúng ta cần cấu trúc HTML thông thường của Gridzy và đặt tên lớp cho tất cả các mục thư viện để chúng ta có thể lọc chúng sau đó

<div class="gridzy">
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=1" alt="a random animal image" />
  <img class="architecture" src="https://loremflickr.com/640/480/arch?random=1" alt="a random architecture image" />
  <img class="people" src="https://loremflickr.com/640/480/people?random=1" alt="a random people image" />
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=2" alt="another random animal image" />
  <img class="architecture" src="https://loremflickr.com/640/480/arch?random=2" alt="another random architecture image" />
  <img class="people" src="https://loremflickr.com/640/480/people?random=2" alt="another random people image" />
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=3" alt="yet another random animal image" />
</div>

Trong ví dụ này, chúng ta chỉ sử dụng một lớp cho mỗi phần tử. Nhưng bạn cũng có thể thiết lập nhiều lớp cho một phần tử duy nhất, nếu phần tử đó có thể tìm thấy thông qua nhiều bộ lọc.

2. Sau đó chúng ta thêm một số nút để có thể thay đổi bộ lọc

<button value="*">All</button>
<button value=".animals">Animals</button>
<button value=".architecture">Architecture</button>
<button value=".people">People</button>

<div class="gridzy">
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=1" alt="a random animal image" />
  <img class="architecture" src="https://loremflickr.com/640/480/arch?random=1" alt="a random architecture image" />
  <img class="people" src="https://loremflickr.com/640/480/people?random=1" alt="a random people image" />
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=2" alt="another random animal image" />
  <img class="architecture" src="https://loremflickr.com/640/480/arch?random=2" alt="another random architecture image" />
  <img class="people" src="https://loremflickr.com/640/480/people?random=2" alt="another random people image" />
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=3" alt="yet another random animal image" />
</div>

Thay vì các nút, bạn cũng có thể sử dụng các thành phần biểu mẫu khác như hộp kiểm, nút radio, trường chọn, v.v.

Như bạn có thể thấy, các giá trị của các nút là các bộ chọn CSS thông thường. Ngay sau khi chúng ta hoàn tất, nhấp vào nút như vậy sẽ hiển thị các hình ảnh khớp với bộ chọn CSS đó. Về mặt kỹ thuật, nó chỉ đơn giản là đặt tùy chọn filter thành giá trị này.

Bạn cũng có thể sử dụng các bộ chọn phức tạp hơn nhiều. Ví dụ :not(.animals) cũng có thể hoạt động, cũng như .animals.people và .animals, .people .

3. Cuối cùng, chúng ta đóng gói các nút trong một vùng chứa div và liên kết chúng với thư viện Gridzy bằng cách thiết lập tùy chọn filterControls :

<div id="myFilterControls">
  <button value="*">All</button>
  <button value=".animals">Animals</button>
  <button value=".architecture">Architecture</button>
  <button value=".people">People</button>
</div>

<div class="gridzy" data-gridzy-filterControls="#myFilterControls button">
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=1" alt="a random animal image" />
  <img class="architecture" src="https://loremflickr.com/640/480/arch?random=1" alt="a random architecture image" />
  <img class="people" src="https://loremflickr.com/640/480/people?random=1" alt="a random people image" />
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=2" alt="another random animal image" />
  <img class="architecture" src="https://loremflickr.com/640/480/arch?random=2" alt="another random architecture image" />
  <img class="people" src="https://loremflickr.com/640/480/people?random=2" alt="another random people image" />
  <img class="animals" src="https://loremflickr.com/640/480/animals?random=3" alt="yet another random animal image" />
</div>

Như bạn có thể thấy, chúng tôi cũng sử dụng một bộ chọn CSS cho tùy chọn filterControls . Bộ chứa div có thuộc tính id chỉ có tác dụng giúp các nút dễ chọn hơn thông qua bộ chọn CSS đó.

Vậy là xong!

Nếu bạn thích giải pháp JavaScript, hãy kiểm tra API .

Giao diện lập trình ứng dụng (API)

Mặc dù Gridzy có API riêng, hầu hết mọi thứ đều có thể thực hiện mà không cần nó, chỉ cần thao tác DOM. Gridzy sẽ nhận thấy điều đó và điều chỉnh lưới. Nhưng cũng có một API rất mạnh mẽ …

Thao tác DOM

Đối với tất cả các thao tác Mô hình đối tượng tài liệu (DOM), trước tiên chúng ta cần phần tử chứa:

// get the container element
var gridzyElement = document.querySelector('.gridzy');

Thêm hình ảnh

Điều quan trọng là phải xây dựng và điền đầy đủ phần tử con mới trước khi bạn thêm nó vào phần tử chứa. Nếu không, Gridzy không thể phát hiện kích thước chính xác.

// create a new img element
var newImage = document.createElement('img');

// add src attribute (!! before you add it to the container element !!)
newImage.src = 'https://loremflickr.com/640/480';

// add it as last element to the container element
gridzyElement.appendChild(newImage);

// or as first element (or anywhere in between)
gridzyElement.insertBefore(newImage, gridzyElement.firstChild);

Xóa hình ảnh

// remove the first image
gridzyElement.removeChild(gridzyElement.firstElementChild);

Thay đổi Tùy chọn

// change the spaceBetween option to a specific value
gridzyElement.setAttribute('data-gridzy-spaceBetween', '10');

// change the layout option to a specific value
gridzyElement.setAttribute('data-gridzy-layout', 'waterfall');

// reset the spaceBetween option to its default value
gridzyElement.removeAttribute('data-gridzy-spaceBetween');

Bạn có thể tìm hiểu thêm về cách thao tác DOM tại tài liệu web MDN . Ngoài ra còn có phần Giới thiệu về DOM .

API độc quyền

Để sử dụng API, trước tiên chúng ta cần có phiên bản Gridzy, được liên kết với phần tử chứa Gridzy:

// get the Gridzy instance
var gridzyInstance = document.querySelector('.gridzy').gridzy;

Nhận Tùy chọn

// get the value of a single option
var currentLayout = gridzyInstance.getOption('layout');

Nhận tất cả các tùy chọn

// get all option values as an object
var currentOptions = gridzyInstance.getOptions();

Thiết lập tùy chọn

// set specific option values
gridzyInstance.setOptions({
  spaceBetween: 10,
  layout: 'waterfall'
});

// or reset options to their default values
gridzyInstance.setOptions({
  spaceBetween: null,
  layout: null
});

Áp dụng bộ lọc

Áp dụng bộ lọc chỉ là thiết lập tùy chọn filter có thể là bất kỳ bộ chọn CSS hợp lệ nào:

// set the filter to match items with class "animals"
gridzyInstance.setOptions({
  filter: '.animals'
});

// reset the filter to match all items again
gridzyInstance.setOptions({
  filter: '*'
});

// set the filter to match items without class "animals"
gridzyInstance.setOptions({
  filter: ':not(.animals)'
});

// set the filter to match items with class "animals" or "people"
gridzyInstance.setOptions({
  filter: '.animals, .people'
});

// set the filter to match items that have both classes, "animals" and "people"
gridzyInstance.setOptions({
  filter: '.animals.people'
});

Thêm chức năng gọi lại

KHÔNG CÒN SỬ DỤNG kể từ phiên bản 2.4.0
Thay vào đó, hãy sử dụng Sự kiện hiện đại và linh hoạt hơn. Xem phần tiếp theo để biết chi tiết.

Gridzy.js 2 hỗ trợ một số tùy chọn cho hàm gọi lại. Chúng chỉ có thể được thiết lập thông qua API độc quyền, nhưng cũng giống như các tùy chọn khác:

// same as set other options
gridzyInstance.setOptions({
  onOptionsChanged: function() {
    // will be executed each time the options have changed.
  },
  onBeforeOptionsChanged: function() {
    // will be executed, before new options take effect.
  }
});
Sự miêu tả
onBeforeOptionsChangedHàm gọi lại được gọi trực tiếp trước khi thiết lập tùy chọn.
onOptionsChangedHàm gọi lại được gọi trực tiếp sau khi thiết lập tùy chọn.
onBeforeRenderHàm gọi lại được gọi trực tiếp trước khi hiển thị.
onRenderHàm gọi lại được gọi trực tiếp sau khi kết xuất.

Sử dụng Sự kiện

kể từ phiên bản 2.4.0

Bạn có thể sử dụng các sự kiện Gridzy giống hệt như các sự kiện JavaScript thông thường:

document.addEventListener('gridzyOptionsChanged', function(event) {
    // will be executed each time the options have changed.
});

document.addEventListener('gridzyBeforeOptionsChanged', function(event) {
    // will be executed, before new options take effect.
});

Một số sự kiện được kích hoạt trên phần tử chứa Gridzy và một số sự kiện khác được kích hoạt trên từng phần tử mục riêng lẻ trong phần tử chứa.

Các sự kiện được kích hoạt trên phần tử chứa Gridzy:

Sự miêu tả
gridzyBeforeInitCháy trước khi khởi tạo thư viện.
gridzyInitCháy sau khi khởi tạo thư viện.
gridzyBeforeOptionsChangedBắn trước khi cài đặt tùy chọn.
gridzyOptionsChangedCháy sau khi thiết lập tùy chọn.
gridzyBeforeRenderCháy trước khi kết xuất.
gridzyRenderCháy sau khi kết xuất.
Nếu bạn bỏ lỡ bất kỳ sự kiện nào ở đây, vui lòng gửi yêu cầu hỗ trợ .

event.target cung cấp phần tử chứa Gridzy.
event.detail.instance cung cấp phiên bản Gridzy.

Các sự kiện được kích hoạt trên các thành phần vật phẩm:

Sự miêu tả
gridzyItemBeforeInitKích hoạt trước khi khởi tạo mục.
gridzyItemInitKích hoạt sau khi khởi tạo mục.
gridzyItemLoadingKích hoạt khi mục bắt đầu tải.
gridzyItemReadyKích hoạt khi mục đã sẵn sàng để tính toán lưới. Do đó, tỷ lệ khung hình đã được biết, nhưng hình ảnh vẫn có thể đang tải.
gridzyItemCompleteKích hoạt khi hình ảnh mục được tải đầy đủ.
Nếu bạn bỏ lỡ bất kỳ sự kiện nào ở đây, vui lòng gửi yêu cầu hỗ trợ .

event.target cung cấp phần tử mục tương ứng.
event.detail.instance cung cấp phiên bản Gridzy.

API – Toàn cầu

Có một số hàm độc lập với các thể hiện của Gridzy. Vì vậy, chúng ta không cần phải có một thể hiện trước.

Nhận tùy chọn mặc định

// get the default value of a single option
var defaultLayout = Gridzy.getDefaultOption('layout');

Nhận tất cả các tùy chọn mặc định

// get all default option values as an object, including the default layout options of the default layout
var defaultOptions = Gridzy.getDefaultOptions();

// or get all default option values, including the default layout options of a specific layout
var defaultOptions = Gridzy.getDefaultOptions('waterfall');

Đặt tùy chọn mặc định

Điều này không thiết lập các tùy chọn của tất cả các phiên bản Gridzy đã khởi tạo, nhưng xác định cơ sở cho các phiên bản mới. Tuy nhiên, nếu một tùy chọn của phiên bản hiện có được đặt lại thông qua giá trị null , nó sẽ sử dụng giá trị mặc định mới.

// set default option values
Gridzy.setDefaultOptions({
  spaceBetween: 10,
  layout: 'waterfall'
});

Bạn có thể sử dụng điều này để thiết lập tùy chọn toàn cục, nếu bạn gọi nó trước khi DOM sẵn sàng. Vì vậy, bạn không cần phải thiết lập tùy chọn dưới dạng thuộc tính nữa.

Tự động hóa

Miễn là tất cả các automatism của Gridzy.js 2 đều hoạt động, thì không cần các phương pháp dưới đây. Nhưng automatism có thể được tắt để sử dụng Gridzy theo cách truyền thống hơn:

// disable automatic initializations
Gridzy.setDefaultOptions({
  autoInitOnDomReady: false,
  autoInitOnDomMutation: false
});

// or switch off all mutation observers
Gridzy.setDefaultOptions({
  autoInitOnDomMutation: false,
  autoSyncChildListMutation: false,
  autoSyncAttributesMutation: false,
  autoSyncChildClassMutation: false,
  autoSyncImageMutation: false
});

Một số tùy chọn này không thể được thiết lập thông qua thuộc tính data-gridzy- hoặc thông qua setOptions() vì những lý do logic sau:

Giá trị mặc địnhSự miêu tả
autoInitOnDomReadytruePhát hiện các phần tử có lớp gridzy khi tải trang và khởi tạo chúng.

Có thể thiết lập thông qua Gridzy.setDefaultOptions()
autoInitOnDomMutation
Người quan sát đột biến
truePhát hiện các phần tử mới có lớp gridzy ngay khi chúng xuất hiện trong DOM và khởi tạo chúng. (ví dụ khi sử dụng chuyển tiếp trang)

Có thể thiết lập thông qua Gridzy.setDefaultOptions()
autoSyncChildListMutation
Người quan sát đột biến
truePhát hiện xem các phần tử con (hình ảnh) được thêm vào hay xóa đi và tự động cập nhật lưới.

Có thể thiết lập thông qua data-grizy- , new Gridzy() , setOptions() , Gridzy.setDefaultOptions()
useOptionAttributestrueXác định xem các thuộc tính data-gridzy- có được sử dụng chung hay không. Nếu false , các tùy chọn chỉ có thể được thiết lập thông qua API độc quyền.

Có thể thiết lập thông qua new Gridzy() , setOptions() , Gridzy.setDefaultOptions()
autoSyncAttributesMutation
Người quan sát đột biến
truePhát hiện các thay đổi của thuộc data-gridzy- và tự động cập nhật lưới. Cũng phát hiện lớp gridzyAnimated được thêm vào hay xóa đi và nếu có thay đổi thuộc tính style . Nếu useOptionAttributes là false , nó chỉ phát hiện các thay đổi thuộc tính style .

Có thể thiết lập thông qua data-grizy- , new Gridzy() , setOptions() , Gridzy.setDefaultOptions()
autoSyncChildClassMutation
Người quan sát đột biến
truePhát hiện những thay đổi thuộc class của tất cả các phần tử con (hình ảnh). Có liên quan đến bộ lọc.

Có thể thiết lập thông qua data-grizy- , new Gridzy() , setOptions() , Gridzy.setDefaultOptions()
autoSyncImageMutation
Người quan sát đột biến

kể từ phiên bản 2.5.0
truePhát hiện những thay đổi của thuộc tính src của tất cả hình ảnh. Có liên quan khi sử dụng với React hoặc các thư viện tương tự.

Có thể thiết lập thông qua data-grizy- , new Gridzy() , setOptions() , Gridzy.setDefaultOptions()
autoRenderOnResize
Thay đổi kích thước

kể từ phiên bản 2.6.0
truePhát hiện những thay đổi về chiều rộng của phần tử. Có liên quan đến thiết kế đáp ứng. (Trước phiên bản 2.6.0, trình lắng nghe sự kiện thay đổi kích thước cửa sổ đã được sử dụng)

Có thể thiết lập thông qua data-grizy- , new Gridzy() , setOptions() , Gridzy.setDefaultOptions()

Khởi tạo thủ công

// initialize a new Gridzy instance
var gridzyInstance = new Gridzy(document.querySelector('.gridzy'), {
  spaceBetween: 10,
  layout: 'waterfall'
});

Phá hủy phiên bản

Nói một cách đại khái thì ngược lại với việc khởi tạo Gridzy.

gridzyInstance.destroy();
gridzyInstance = null;

Đồng bộ danh sách con theo cách thủ công

// after child elements (images) are added to or removed from the DOM.
gridzyInstance.syncChildList();

Đồng bộ một phần tử con đơn lẻ theo cách thủ công

Thông thường không cần thiết, ngoại trừ trong những trường hợp rất hiếm.

// after child elements (images) are added to the DOM and only one of them should be synced to Gridzy.
gridzyInstance.syncChild(childElement);

Đồng bộ hóa các thuộc tính theo cách thủ công

Lưu ý rằng tùy chọn useOptionAttributes phải true đối với trường hợp này.

// after data-gridzy- attributes have changed
gridzyInstance.syncAttributes();

Buộc kết xuất

Thông thường không cần thiết, ngay cả khi tất cả các tính năng tự động đều bị tắt

gridzyInstance.render();