Freddy
Freddy

Reputation: 867

JavaScript slice() not showing the correct amount of cards on click

I have a section called .registryShowcase.

This module contains logos and displays 8 by default. Then, on button click, it will load the next 8, until there's no more to load (at which point the button will hide itself).

However, with my current approach, I'm running into the following issues:

  1. I have multiple .registryShowcase sections on a single page which means that when I click #registryShowcase-loadmore, it starts to show logos in the other sections too.
  2. #registryShowcase-loadmore doesn't hide in the first section, even through it has completed showing all possible logos.
  3. Section 2 only loads 6 more logos, even though I have defined it to show the next 8

Demo

$(function() {

  const loadmoreBtn = $('.registryShowcase-loadmore');
  const hiddenCard = $('.registryShowcase__card:hidden');
  var x = 8;

  loadmoreBtn.on('click', function(e) {
    e.preventDefault();
    x = x + 8;
    hiddenCard.slice(0, x).fadeIn().addClass("registryShowcase__card--flex");
    if (hiddenCard.length == 0) {
      loadmoreBtn.fadeOut();
    }
  });

});
:root {
  --navy: #0E185F;
  --white: #FFFFFF;
}

.registryShowcase {
  padding: 139px 0 140px 0;
}

.registryShowcase__card {
  display: none;
}

.registryShowcase__card--flex,
.registryShowcase__card:nth-child(-n+8) {
  display: flex !important;
}

.registryShowcase__box {
  margin-bottom: 21px;
  background-color: var(--white);
  border-radius: 26px;
  padding: 48px 38px;
  display: flex;
  justify-content: center;
  align-items: center;
  flex: 1;
}

.registryShowcase__btn {
  margin-top: 43px;
}

.registryShowcase__btn a {
  color: #FF6575;
}

.registryShowcase__btn a:hover {
  color: var(--white);
}
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

<!------------------------------>
<!-- SECTION 1 (has 10 items) -->
<!------------------------------>

<section class="registryShowcase" style="background-color: #0145A4;">
  <div class="container">
    <div class="row">

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

    </div>

    <div class="row" data-animate="fadeInUp">
      <div class="col-12">
        <div class="registryShowcase__btn d-flex justify-content-center">
          <a class="button registryShowcase-loadmore" href>Load more</a>
        </div>
      </div>
    </div>

  </div>
</section>

<!------------------------------>
<!-- SECTION 2 (has 14 items) -->
<!------------------------------>

<section class="registryShowcase" style="background-color: #0057CC;">
  <div class="container">
    <div class="row">

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

      <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
        <div class="registryShowcase__box text-center">
          <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
        </div>
      </div>

    </div>

    <div class="row" data-animate="fadeInUp">
      <div class="col-12">
        <div class="registryShowcase__btn d-flex justify-content-center">
          <a class="button registryShowcase-loadmore" href>Load more</a>
        </div>
      </div>
    </div>

  </div>
</section>

Upvotes: 0

Views: 115

Answers (1)

posixpascal
posixpascal

Reputation: 3140

Without touching too much of the code, maybe something like this where each section stores it's current visible-count in a data-attribute.

With [data-cards-to-load] and [data-cards-to-show] you can define how many cards should be visible up front and how many cards you want to load per button click.

The second section now shows 6 cards initially and loads 8 while the first section shows 6 cards and loads 6 per button click.

 const CARD_SELECTOR = '.registryShowcase__card';
const LOAD_MORE_SELECTOR = '.registryShowcase-loadmore';
const SHOWCASE_SELECTOR = '[data-showcase]';


const loadMore = (showcase$, numVisible) => {
    const cards = showcase$.find(CARD_SELECTOR);

    cards.slice(0, numVisible).fadeIn();
    cards.slice(numVisible).fadeOut();
    if (numVisible >= cards.length) {
        showcase$.find(LOAD_MORE_SELECTOR).fadeOut();
    }

    showcase$.data('showcase-visible', numVisible);
}

const initShowCase = (showcase$) => {
    const cardsToShow = showcase$.data('cards-to-show') || 6;
    const cardsToLoad =  showcase$.data('cards-to-load') || 6;
    showcase$.data('showcase-visible', 0);
    showcase$.find(CARD_SELECTOR).fadeOut()

    // Load first set of cards
    loadMore(showcase$, cardsToShow);

    showcase$.find(LOAD_MORE_SELECTOR).on('click', (ev) => {
        const visibleCards = (showcase$.data('showcase-visible')) + cardsToLoad;
        loadMore(showcase$, visibleCards);
        ev.preventDefault();
    });
}

$(function () {
    $('[data-showcases]').each((idx, showcase) => initShowCase($(showcase)));
});
:root {
    --navy: #0E185F;
    --white: #FFFFFF;
}


.registryShowcase {
    padding: 139px 0 140px 0;
}

.registryShowcase__card {
    display: none;
}



.registryShowcase__box {
    margin-bottom: 21px;
    background-color: var(--white);
    border-radius: 26px;
    padding: 48px 38px;
    display: flex;
    justify-content: center;
    align-items: center;
    flex: 1;
}

.registryShowcase__btn {
    margin-top: 43px;
}

.registryShowcase__btn a {
    color: #FF6575;
}

.registryShowcase__btn a:hover {
    color: var(--white);
}

.d-none {
    display: none !important;
}
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

<!------------------------------>
<!-- SECTION 1 (has 10 items) -->
<!------------------------------>


<section data-showcases class="registryShowcase" style="background-color: #0145A4;">
<div class="container">
    <div class="row">

        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

    </div>

    <div class="row" data-animate="fadeInUp">
        <div class="col-12">
            <div class="registryShowcase__btn d-flex justify-content-center">
                <a class="button registryShowcase-loadmore" href>Load more</a>
            </div>
        </div>
    </div>

</div>
</section>


<!------------------------------>
<!-- SECTION 2 (has 14 items) -->
<!------------------------------>

<section data-showcases  data-cards-to-show='6' data-cards-to-load="8" class="registryShowcase" style="background-color: #0057CC;">
<div class="container">
    <div class="row">
        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

        <div class="col-6 col-md-2 col-lg-3 registryShowcase__card">
            <div class="registryShowcase__box text-center">
                <img class="registryShowcase__logo" src="https://7944074.fs1.hubspotusercontent-na1.net/hubfs/7944074/website/images/logos/colored/salesforce-logo.svg" alt="logo">
            </div>
        </div>

    </div>

    <div class="row" data-animate="fadeInUp">
        <div class="col-12">
            <div class="registryShowcase__btn d-flex justify-content-center">
                <a class="button registryShowcase-loadmore" href>Load more</a>
            </div>
        </div>
    </div>

</div>
</section>

Upvotes: 1

Related Questions