RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1586877
Accepted
Майя
Майя
Asked:2024-07-11 22:32:58 +0000 UTC2024-07-11 22:32:58 +0000 UTC 2024-07-11 22:32:58 +0000 UTC

如何制作多个“显示更多”按钮?

  • 772

我怎样才能编写这段代码,这样我就不必每次都编写新函数来显示更多按钮?

const showMore = document.querySelector('.btn-download');
const btnReviews = document.querySelectorAll('.reviews_btn');
const cards = document.querySelectorAll('.glass__container-card').length;
const cardsReviews = document.querySelectorAll('.reviews__wrapper-photo').length;
let items = 8;

  showMore.addEventListener('click', () => {
    items += 8; // сколько карточек открывается
    const array = Array.from(document.querySelector('.glass__container').children);
    const visItems = array.slice(0 , items);
    visItems.forEach(el => el.classList.add('is-visible'));
      
    if(visItems.length === cards) {
      showMore.style.display = 'none';
    }
  });

  btnReviews.addEventListener('click', () => {
    items += 8; // сколько карточек открывается
    const arrayReviews = Array.from(document.querySelector('.reviews__wrapper').children);
    const visItemsReviews = arrayReviews.slice(0 , items);

    visItemsReviews.forEach(el => el.classList.add('is-visible'));
      
    if(visItemsReviews.length === cardsReviews) {
      btnReviews.style.display = 'none';
    }
  });
.reviews__wrapper-photo:nth-child(n+5) {
    display: none;
}
.reviews__wrapper-photo.is-visible {
    display: block;
}
.glass__container-card:nth-child(n+5) {
    display: none;
}
.glass__container-card.is-visible {
    display: block;
}
 <div class="reviews__wrapper">
                <a class="reviews__wrapper-photo">
                    lorem
                </a>
                <a class="reviews__wrapper-photo">
                    lorem
                </a>
                <a class="reviews__wrapper-photo">
                    lorem
                </a>
                <a class="reviews__wrapper-photo">
                    lorem
                </a>
                <a class="reviews__wrapper-photo">
                    lorem
                </a>
                <a class="reviews__wrapper-photo">
                    lorem
                </a>
                <a class="reviews__wrapper-photo">
                    lorem
                </a>
            </div>
     <div class="reviews_btn">
       <button>
           Показать ещё
      </button>
</div> 

 <div class="glass__wrapper">
                <a class="glass__container-card">
                    lorem
                </a>
                <a class="glass__container-card">
                    lorem
                </a>
                <a class="glass__container-card">
                    lorem
                </a>
                <a class="glass__container-card">
                    lorem
                </a>
                <a class="glass__container-card">
                    lorem
                </a>
                <a class="glass__container-card">
                    lorem
                </a>
                <a class="glass__container-card">
                    lorem
                </a>
            </div>
     <div class="btn-download">
       <button>
           Показать ещё
      </button>
</div> 

javascript
  • 1 1 个回答
  • 53 Views

1 个回答

  • Voted
  1. Best Answer
    De.Minov
    2024-07-14T03:23:13Z2024-07-14T03:23:13Z

    为了确保“显示”必要的元素,我建议使用带有属性的选项data-*,对于“显示更多”按钮,我们使用data-more-id具有唯一标识符的属性,并对属性下的元素使用相同的标识符data-more-toggle-id。
    接下来,当您按下按钮时,我们通过 执行搜索data-more-toggle-id="ID",收到必要的块后,我们“显示”它们。

    此选项的优点是布局不会以任何方式限制元素的搜索,即data-more-toggle-id可以位于文档的任何部分。

    // Проходим по всем кнопкам с атрибутом `data-more-id`
    document.querySelectorAll('.btn-more[data-more-id]').forEach((button) => {
      const id = button.dataset.moreId; // Получаем значение ID
      
      // Вешаем слушатель клика на кнопку
      button.addEventListener('click', () => {
        // При нажатии выполняем поиск элементов с атрибутом `data-more-toggle-id` равным ID выше.
        const elems = document.querySelectorAll(`[data-more-toggle-id="${id}"]`);
        
        // Если такие элементы есть, то..
        if(elems.length > 0) {
          // Вешаем им класс `.is-visible`
          elems.forEach((elem) => elem.classList.add('is-visible'));
          // Удаляем кнопку "Показать ещё"
          button.remove();
        }
      })
    })
    .reviews__wrapper-photo:nth-child(n+5) {
      display: none;
    }
    
    .reviews__wrapper-photo.is-visible {
      display: inline-block;
    }
    
    .glass__container-card:nth-child(n+5) {
      display: none;
    }
    
    .glass__container-card.is-visible {
      display: inline-block;
    }
    <div class="reviews__wrapper">
      <a class="reviews__wrapper-photo" data-more-toggle-id="0">lorem</a>
      <a class="reviews__wrapper-photo" data-more-toggle-id="0">lorem</a>
      <a class="reviews__wrapper-photo" data-more-toggle-id="0">lorem</a>
      <a class="reviews__wrapper-photo" data-more-toggle-id="0">lorem</a>
      <a class="reviews__wrapper-photo" data-more-toggle-id="0">lorem</a>
      <a class="reviews__wrapper-photo" data-more-toggle-id="0">lorem</a>
      <a class="reviews__wrapper-photo" data-more-toggle-id="0">lorem</a>
    </div>
    <div class="reviews_btn">
      <button class="btn-more" data-more-id="0">Показать ещё</button>
    </div>
    
    <div class="glass__wrapper">
      <a class="glass__container-card" data-more-toggle-id="1">lorem</a>
      <a class="glass__container-card" data-more-toggle-id="1">lorem</a>
      <a class="glass__container-card" data-more-toggle-id="1">lorem</a>
      <a class="glass__container-card" data-more-toggle-id="1">lorem</a>
      <a class="glass__container-card" data-more-toggle-id="1">lorem</a>
      <a class="glass__container-card" data-more-toggle-id="1">lorem</a>
      <a class="glass__container-card" data-more-toggle-id="1">lorem</a>
    </div>
    <div class="btn-download">
      <button class="btn-more" data-more-id="1">Показать ещё</button>
    </div>


    尽管做出了这个决定,我仍然会从布局开始,即有一个父块,其中有一个“显示更多”按钮以及需要显示的元素,同时我们不分配任何标识符,而是仅在该父块内部进行搜索。

    // Проходим по всем элементам `.more-parent`
    document.querySelectorAll('.more-parent').forEach((parent) => {
      // Ищем все элементы и кнопку внутри текущего `.more-parent`
      const moreElements = parent.querySelectorAll('.more-elements');
      const moreButton = parent.querySelector('.more-button');
      
      // Если элементы и кнопка существуют, то..
      if(moreButton && moreElements.length > 0) {
        // Вешаем слушатель клика на кнопку
        moreButton.addEventListener('click', () => {
          // Вешаем всем элементам класс `.is-visible`
          moreElements.forEach((elem) => elem.classList.add('is-visible'));
          // Удаляем кнопку "Показать ещё"
          moreButton.remove();
        })
      }
    })
    .reviews__wrapper-photo:nth-child(n+5) {
      display: none;
    }
    
    .reviews__wrapper-photo.is-visible {
      display: inline-block;
    }
    
    .glass__container-card:nth-child(n+5) {
      display: none;
    }
    
    .glass__container-card.is-visible {
      display: inline-block;
    }
    <div class="more-parent">
      <div class="reviews__wrapper">
        <a class="reviews__wrapper-photo more-elements">lorem</a>
        <a class="reviews__wrapper-photo more-elements">lorem</a>
        <a class="reviews__wrapper-photo more-elements">lorem</a>
        <a class="reviews__wrapper-photo more-elements">lorem</a>
        <a class="reviews__wrapper-photo more-elements">lorem</a>
        <a class="reviews__wrapper-photo more-elements">lorem</a>
        <a class="reviews__wrapper-photo more-elements">lorem</a>
      </div>
      <div class="reviews_btn">
        <button class="more-button">Показать ещё</button>
      </div>
    </div>
    
    <div class="more-parent">
      <div class="glass__wrapper">
        <a class="glass__container-card more-elements">lorem</a>
        <a class="glass__container-card more-elements">lorem</a>
        <a class="glass__container-card more-elements">lorem</a>
        <a class="glass__container-card more-elements">lorem</a>
        <a class="glass__container-card more-elements">lorem</a>
        <a class="glass__container-card more-elements">lorem</a>
        <a class="glass__container-card more-elements">lorem</a>
      </div>
      <div class="btn-download">
        <button class="more-button">Показать ещё</button>
      </div>
    </div>

    • 0

相关问题

  • 第二个 Instagram 按钮的 CSS 属性

  • 由于模糊,内容不可见

  • 弹出队列。消息显示不正确

  • 是否可以在 for 循环中插入提示?

  • 如何将 JSON 请求中的信息输出到数据表 Vuetify vue.js?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5