Achieve dynamic Prev and Next functionality for pagination using Isotope

Viewed 20

I'm using jQuery Isotope for my pagination functionality. Does anyone know if this sort of thing is built into jquery-isotope? I read the documentation but couldn't find anything.

I got the pages working with no issues, but currently, the next and prev are not functioning as intended and are showing all 6 divs.

I'm currently trying to make the prev and next buttons work in the sense that they will flow to the appropriate (opposite) page when clicked, and works dynamically. I have attempted to achieve this functionality in jQuery under // attempt at making prev and next buttons work. jQuery is not my most robust language so I'd prefer a pure JS solution if possible, but I am open to anything.

/**
 * selector helper function
 */
const select = (el, all = false) => {
  el = el.trim()
  if (all) {
    return [...document.querySelectorAll(el)]
  } else {
    return document.querySelector(el)
  }
}

/**
 *  onscroll event listener 
 */
const onscroll = (el, listener) => {
  el.addEventListener('scroll', listener)
}

// get to top after new page click

let pageTop = select('.page-top')
if (pageTop) {
  const togglePagetop = () => {
    if (window.scrollY > 100) {
      pageTop.classList.add('active')
    } else {
      pageTop.classList.remove('active')
    }
  }
  window.addEventListener('load', togglePagetop)
  onscroll(document, togglePagetop)
}
/** 
 * Team Isotope and filter
 */

let teamIsotope = document.querySelector('.team-isotope');

if (teamIsotope) {

  let teamFilter = teamIsotope.getAttribute('data-team-filter') ? teamIsotope.getAttribute('data-team-filter') : '*';
  let teamLayout = teamIsotope.getAttribute('data-team-layout') ? teamIsotope.getAttribute('data-team-layout') : 'masonry';
  let teamSort = teamIsotope.getAttribute('data-team-sort') ? teamIsotope.getAttribute('data-team-sort') : 'original-order';

  window.addEventListener('load', () => {
    let teamIsotope = new Isotope(document.querySelector('.team-container'), {
      itemSelector: '.team-member',
      layoutMode: teamLayout,
      filter: teamFilter,
      sortBy: teamSort
    });

    let menuFilters = document.querySelectorAll('.team-isotope .team-filters li');
    menuFilters.forEach(function(el) {
      el.addEventListener('click', function() {
        document.querySelector('.team-isotope .team-filters .filter-active').classList.remove('filter-active');
        this.classList.add('filter-active');
        teamIsotope.arrange({
          filter: this.getAttribute('data-filter')
        });
        if (typeof aos_init === 'function') {
          aos_init();
        }
      }, false);
    });

  });
}


// attempt at making prev and next buttons work

var page = 0;
var $items = $(".team-container > .team-member");
var $grid = $(".team-container");

function filtre() {
  var ell = [];
  for (i = page * 3; i < (page + 1) * 3; i++) {
    ell.push($items[i]);
  }
  $grid.isotope({
    filter: ell
  })
  return ell;
}

$("#next").on("click", function() {
  if (page < 3) {
    page += 1;
    filtre();
  }
})

$("#prev").on("click", function() {
  if (page > 0) {
    page -= 1;
    filtre();
  }
})
.pagination-a .pagination .page-item.filter-active .page-link {
  background-color: #72bf43;
}

.team-isotope {
  display: flex;
  flex-direction: column-reverse;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.3.0/font/bootstrap-icons.css">

<div class="container">
  <div class="team-isotope" data-team-filter=".filter-first" data-team-layout="masonry" data-team-sort="original-order">

    <nav class="pagination-a">
      <ul class="pagination justify-content-end team-filters">
        <li class="page-item prev" id="prev">
          <a class="page-link" href="#" tabindex="-1">
            <span class="bi bi-chevron-left"></span>
          </a>
        </li>
        <li data-filter=".filter-first" class="page-item filter-active">
          <a class="page-link page-top" href="#">1</a>
        </li>
        <li data-filter=".filter-second" class="page-item">
          <a class="page-link page-top" href="#">2</a>
        </li>
        <li class="page-item next" id="next">
          <a class="page-link" href="#">
            <span class="bi bi-chevron-right"></span>
          </a>
        </li>
      </ul>

    </nav>

    <div class="row team-container">
      <div class="col-lg-4 col-md-6 col-sm-12 team-member filter-first">
        <div class="card-box-d">
          <div class="card-img-d">
            <img src="https://dummyimage.com/200/000/fff" alt="" class="img-d img-fluid">
          </div>
          <div class="card-overlay card-overlay-hover">
            <div class="card-header-d">
              <div class="card-title-d align-self-center">
                <h3 class="title-d my-2 m-0">
                  <a href="" class="link-two">foo fooman
                        <i class="bi bi-link-45deg"></i>
                      </a>
                </h3>
              </div>
            </div>
            <div class="card-body-d">
              <p class="content-d color-text-a">
                This company was founded and constructed by foo fooman.
              </p>
              <div class="info-agents color-a mt-3">
                <p>
                  <strong class="color-b">Role: </strong> Principal
                </p>
                <p>
                  <strong class="color-b">Phone: </strong> +54 356 945-2334
                </p>
                <p>
                  <strong class="color-b">Email: </strong> agents@example.com
                </p>
              </div>
            </div>
            <div class="card-footer-d">
              <div class="socials-footer d-flex justify-content-center">
                <ul class="list-inline">
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-facebook" aria-hidden="true"></i>
                    </a>
                  </li>
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-twitter" aria-hidden="true"></i>
                    </a>
                  </li>
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-instagram" aria-hidden="true"></i>
                    </a>
                  </li>
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-linkedin" aria-hidden="true"></i>
                    </a>
                  </li>
                  <li class="list-inline-item">
                    <a href="team/nick-lind.html" class="color-text-a">
                      <i class="bi bi-link-45deg"></i>
                    </a>
                  </li>
                </ul>
              </div>

            </div>
          </div>
        </div>
      </div>
      <div class="col-lg-4 col-md-6 col-sm-12 team-member filter-first">
        <div class="card-box-d">
          <div class="card-img-d">
            <img src="https://dummyimage.com/200/000/fff" alt="" class="img-d img-fluid">
          </div>
          <div class="card-overlay card-overlay-hover">
            <div class="card-header-d">
              <div class="card-title-d align-self-center">
                <h3 class="title-d">
                  <a href="maintenance-mode.html" class="link-two">foo fooman
                        <i class="bi bi-link-45deg"></i>
                      </a>
                </h3>
              </div>
            </div>
            <div class="card-body-d">
              <p class="content-d color-text-a">
                foo fooman is a Project Manager
              </p>
              <div class="info-agents color-a">
                <p>
                  <strong class="color-b">Role: </strong> Project Manager
                </p>
                <p>
                  <strong class="color-b">Phone: </strong> +54 356 945-2334
                </p>
                <p>
                  <strong class="color-b">Email: </strong> foo@foofooman.com
                </p>
              </div>
            </div>
            <div class="card-footer-d">
              <div class="socials-footer d-flex justify-content-center">
                <ul class="list-inline">
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-facebook" aria-hidden="true"></i>
                    </a>
                  </li>
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-twitter" aria-hidden="true"></i>
                    </a>
                  </li>
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-instagram" aria-hidden="true"></i>
                    </a>
                  </li>
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-linkedin" aria-hidden="true"></i>
                    </a>
                  </li>
                </ul>
              </div>
            </div>
          </div>
        </div>
      </div>
      <div class="col-lg-4 col-md-6 col-sm-12 team-member filter-first">
        <div class="card-box-d">
          <div class="card-img-d">
            <img src="https://dummyimage.com/200/000/fff" alt="" class="img-d img-fluid">
          </div>
          <div class="card-overlay card-overlay-hover">
            <div class="card-header-d">
              <div class="card-title-d align-self-center">
                <h3 class="title-d">
                  <a href="maintenance-mode.html" class="link-two">foo fooman
                        <i class="bi bi-link-45deg"></i>
                      </a>
                </h3>
              </div>
            </div>
            <div class="card-body-d">
              <p class="content-d color-text-a">
                foo is a Project Manager for
              </p>
              <div class="info-agents color-a">
                <p>
                  <strong class="color-b">Role: </strong> Project Manager
                </p>
                <p>
                  <strong class="color-b">Phone: </strong> +54 356 945-2334
                </p>
                <p>
                  <strong class="color-b">Email: </strong> foo@foofooman.com
                </p>
              </div>
            </div>
            <div class="card-footer-d">
              <div class="socials-footer d-flex justify-content-center">
                <ul class="list-inline">
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-facebook" aria-hidden="true"></i>
                    </a>
                  </li>
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-twitter" aria-hidden="true"></i>
                    </a>
                  </li>
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-instagram" aria-hidden="true"></i>
                    </a>
                  </li>
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-linkedin" aria-hidden="true"></i>
                    </a>
                  </li>
                </ul>
              </div>
            </div>
          </div>
        </div>
      </div>
      <div class="col-lg-4 col-md-6 col-sm-12 team-member filter-second">
        <div class="card-box-d">
          <div class="card-img-d">
            <img src="https://dummyimage.com/200/e1e1e1/000000" alt="" class="img-d img-fluid">
          </div>
          <div class="card-overlay card-overlay-hover">
            <div class="card-header-d">
              <div class="card-title-d align-self-center">
                <h3 class="title-d my-2 m-0">
                  <a href="" class="link-two">foo fooman
                        <i class="bi bi-link-45deg"></i>
                      </a>
                </h3>
              </div>
            </div>
            <div class="card-body-d">
              <p class="content-d color-text-a">
                This company was founded and constructed by foo fooman.
              </p>
              <div class="info-agents color-a mt-3">
                <p>
                  <strong class="color-b">Role: </strong> Principal
                </p>
                <p>
                  <strong class="color-b">Phone: </strong> +54 356 945-2334
                </p>
                <p>
                  <strong class="color-b">Email: </strong> agents@example.com
                </p>
              </div>
            </div>
            <div class="card-footer-d">
              <div class="socials-footer d-flex justify-content-center">
                <ul class="list-inline">
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-facebook" aria-hidden="true"></i>
                    </a>
                  </li>
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-twitter" aria-hidden="true"></i>
                    </a>
                  </li>
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-instagram" aria-hidden="true"></i>
                    </a>
                  </li>
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-linkedin" aria-hidden="true"></i>
                    </a>
                  </li>
                  <li class="list-inline-item">
                    <a href="team/nick-lind.html" class="color-text-a">
                      <i class="bi bi-link-45deg"></i>
                    </a>
                  </li>
                </ul>
              </div>

            </div>
          </div>
        </div>
      </div>
      <div class="col-lg-4 col-md-6 col-sm-12 team-member filter-second">
        <div class="card-box-d">
          <div class="card-img-d">
            <img src="https://dummyimage.com/200/e1e1e1/000000" alt="" class="img-d img-fluid">
          </div>
          <div class="card-overlay card-overlay-hover">
            <div class="card-header-d">
              <div class="card-title-d align-self-center">
                <h3 class="title-d">
                  <a href="maintenance-mode.html" class="link-two">foo fooman
                        <i class="bi bi-link-45deg"></i>
                      </a>
                </h3>
              </div>
            </div>
            <div class="card-body-d">
              <p class="content-d color-text-a">
                foo fooman is a Project Manager
              </p>
              <div class="info-agents color-a">
                <p>
                  <strong class="color-b">Role: </strong> Project Manager
                </p>
                <p>
                  <strong class="color-b">Phone: </strong> +54 356 945-2334
                </p>
                <p>
                  <strong class="color-b">Email: </strong> foo@foofooman.com
                </p>
              </div>
            </div>
            <div class="card-footer-d">
              <div class="socials-footer d-flex justify-content-center">
                <ul class="list-inline">
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-facebook" aria-hidden="true"></i>
                    </a>
                  </li>
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-twitter" aria-hidden="true"></i>
                    </a>
                  </li>
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-instagram" aria-hidden="true"></i>
                    </a>
                  </li>
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-linkedin" aria-hidden="true"></i>
                    </a>
                  </li>
                </ul>
              </div>
            </div>
          </div>
        </div>
      </div>
      <div class="col-lg-4 col-md-6 col-sm-12 team-member filter-second">
        <div class="card-box-d">
          <div class="card-img-d">
            <img src="https://dummyimage.com/200/e1e1e1/000000" alt="" class="img-d img-fluid">
          </div>
          <div class="card-overlay card-overlay-hover">
            <div class="card-header-d">
              <div class="card-title-d align-self-center">
                <h3 class="title-d">
                  <a href="maintenance-mode.html" class="link-two">foo fooman
                        <i class="bi bi-link-45deg"></i>
                      </a>
                </h3>
              </div>
            </div>
            <div class="card-body-d">
              <p class="content-d color-text-a">
                foo is a Project Manager for
              </p>
              <div class="info-agents color-a">
                <p>
                  <strong class="color-b">Role: </strong> Project Manager
                </p>
                <p>
                  <strong class="color-b">Phone: </strong> +54 356 945-2334
                </p>
                <p>
                  <strong class="color-b">Email: </strong> foo@foofooman.com
                </p>
              </div>
            </div>
            <div class="card-footer-d">
              <div class="socials-footer d-flex justify-content-center">
                <ul class="list-inline">
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-facebook" aria-hidden="true"></i>
                    </a>
                  </li>
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-twitter" aria-hidden="true"></i>
                    </a>
                  </li>
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-instagram" aria-hidden="true"></i>
                    </a>
                  </li>
                  <li class="list-inline-item">
                    <a href="#" class="color-text-a">
                      <i class="bi bi-linkedin" aria-hidden="true"></i>
                    </a>
                  </li>
                </ul>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.isotope/3.0.6/isotope.pkgd.js" integrity="sha512-E/yP5UiPXb6VelX+dFLuUD+1IZw/Kz7tMncFTYbtoNSCdRZPFoGN3jZ2p27VUxHEkhbPiLuZhZpVEXxk9wAHCQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

Note: I'd like to have prev disabled when the page loads, and enabled after next is clicked. & vice versa.

0 Answers
Related