Как мне перебирать изображения, реализованные в виде столбцов в div в JQuery?

У меня есть альбом с картинками.

HTML:

<div class = "gallery">
  <figure class = "figure">
    <img src = "..." class = "figure-img img-fluid gallery-item">
    <figcaption class = "figure-caption">...</figcaption>
  </figure>
  ...
</div>

CSS:

.gallery {
  column-width: 300px;
  column-gap: 0;
}

.gallery-item {
  width: 350px;
  margin-bottom: 1rem;
  display: inline-block;
  padding: 0.3rem;
}

Количество картинок не фиксировано, а их высота может быть разной.

Я пытаюсь перебирать цифры в JQuery следующим образом:

var items = $('.gallery').children();

В этом случае порядок повторных изображений вертикальный. Я имею в виду, что сначала я получаю изображения из первого столбца сверху вниз, после этого полного второго столбца и т. д. Я понимаю, что это потому, что порядок цифр в моем HTML должен быть вертикальным. Но мне нужен способ перебора чисел таким образом:

Как мне перебирать изображения, реализованные в виде столбцов в div в JQuery?

Возможно, есть способ сделать это только с помощью JQuery. Или, может быть, мне следует внести некоторые изменения в свой HTML и CSS. Как лучше всего решить эту проблему?

Почему вам нужно повторять их именно в этом порядке?

Kosh 21.07.2018 21:13

Я хочу сохранить интуитивно понятный порядок картинок во всплывающих окнах.

Fomalhaut 21.07.2018 21:19

Проверьте bootstrap, он поможет вам с разметкой столбцов

Santosh Sawant 21.07.2018 21:25
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
0
3
28
2

Ответы 2

Вы должны отсортировать элементы перед итерацией (чистое решение js):

const items = [...document.querySelectorAll('.gallery figure')]

items.sort((a, b) => a.offsetTop/2 - b.offsetTop);

var output = ''

for ({textContent:t} of items) output += `${t} `

console.info(output)
.gallery {
  display: flex;
  flex-flow: column wrap;
  height: 400px; width:500px;
}

figure {
  width: 150px;
  margin: 0 1rem 1rem 0;
  background: #aaa;
  color: #fff;
  text-align: center;
  font-size: 40px;
  line-height: 2;
}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class = "gallery">
  <figure style = "height:100px">1</figure>
  <figure style = "height:80px">2</figure>
  <figure style = "height:120px">3</figure>
  <figure style = "height:70px">4</figure>
  <figure style = "height:100px">5</figure>
  <figure style = "height:100px">6</figure>
  <figure style = "height:80px">7</figure>
  <figure style = "height:120px">8</figure>
  <figure style = "height:70px">9</figure>
</div>

Количество столбцов фиксировано? Если у вас всегда будет 3 столбца, вы можете пометить каждый столбец классом:

HTML:

<div class = "gallery">
<figure class = "figure col1">
    <img src = "..." class = "figure-img img-fluid gallery-item">
    <figcaption class = "figure-caption">...</figcaption>
</figure>
<figure class = "figure col2">
    <img src = "..." class = "figure-img img-fluid gallery-item">
    <figcaption class = "figure-caption">...</figcaption>
</figure>
<figure class = "figure col3">
    <img src = "..." class = "figure-img img-fluid gallery-item">
    <figcaption class = "figure-caption">...</figcaption>
</figure>
<figure class = "figure col1">
    <img src = "..." class = "figure-img img-fluid gallery-item">
    <figcaption class = "figure-caption">...</figcaption>
</figure>
<figure class = "figure col2">
    <img src = "..." class = "figure-img img-fluid gallery-item">
    <figcaption class = "figure-caption">...</figcaption>
</figure>
<figure class = "figure col3">
    <img src = "..." class = "figure-img img-fluid gallery-item">
    <figcaption class = "figure-caption">...</figcaption>
</figure>
...

JQuery:

var items = [];

for (var i = 1; i < 4; i++) {
    $(".col"+i).each(function () {
        items.push($(this));
    });
}

Другие вопросы по теме