【问题标题】:How to hide button after slide?幻灯片后如何隐藏按钮?
【发布时间】:2022-10-19 21:12:28
【问题描述】:

我有一个带有“下一个”和“上一个”按钮的滑块,“上一个”按钮是隐藏的。

我想在显示最后一张幻灯片时隐藏“下一张”按钮,并在第一次转换幻灯片后显示“上一张”按钮。

想用Javascript实现它,你能帮我吗?

let next = document.querySelector('.btn_next_slide'),
prev = document.querySelector('.btn_prev_slide'),
line = document.querySelector('.product_slider_line'),
slides = document.getElementsByClassName('product_slider').length,
step = document.querySelector('.product_slider').clientWidth
count = 0;

next.onclick = ()=> {
    count ++;

    if (count >= slides-1) count = slides-2;
    line.style.transform = 'translate(' + `${- step * count}px)`;
};

prev.onclick = ()=> {
    count --;

    if (count <= 0) count = 0;
    line.style.transform = 'translate(' + `${- step * count}px)`;
};

【问题讨论】:

  • 请在您的问题中添加一些代码示例。
  • 请提供足够的代码,以便其他人可以更好地理解或重现该问题。
  • @JohannesWulf 我已经为滑块添加了我的 js 代码,希望它会有所帮助

标签: javascript html css


【解决方案1】:

您可以添加一个在每次幻灯片更改后更新可见性的功能。

let next = document.querySelector('.btn_next_slide'),
    prev = document.querySelector('.btn_prev_slide'),
    line = document.querySelector('.product_slider_line'),
    slides = document.getElementsByClassName('product_slider').length,
    step = document.querySelector('.product_slider').clientWidth,
    count = 0;

next.onclick = () => {
    count++;
    if (count >= slides - 1) count = slides - 2;
    line.style.transform = 'translate(' + `${- step * count}px)`;
    updateButtonVisibility();
};
prev.onclick = () => {
    count--;
    if (count <= 0) count = 0;
    line.style.transform = 'translate(' + `${- step * count}px)`;
    updateButtonVisibility();
};

function updateButtonVisibility() {
    if (count === 0) {
        // first slide
        prev.style.visibility = 'hidden';
        next.style.visibility = 'visible';
    } else if (count === slides - 2) {
        // last slide
        prev.style.visibility = 'visible';
        next.style.visibility = 'hidden';
    } else {
        // medium slide
        prev.style.visibility = 'visible';
        next.style.visibility = 'visible';
    }
}

【讨论】:

  • 谢谢,如果(计数 === 幻灯片 - 2),我只进行了 1 次小更正
【解决方案2】:
    const buttons = document.querySelectorAll('[data-carousel-button]');

buttons.forEach((button) => {
  button.addEventListener('click', () => {
    // show the buttons because they can be hidden before
    buttons[0].style.visibility = 'visible';
    buttons[1].style.visibility = 'visible';
    const positionChange = button.dataset.carouselButton === 'next' ? 1 : -1;
    const photos = button
      .closest('[data-carousel]')
      .querySelector('[data-photos]');
    let activePhoto = photos.querySelector('[data-active]');
    let newPosition =
      [...photos.children].indexOf(activePhoto) + positionChange;

    photos.children[newPosition].dataset.active = true;
    delete activePhoto.dataset.active;
    // Check if active slide is the first one or the last one
    if (newPosition === 0) buttons[0].style.visibility = 'hidden';
    if (newPosition === photos.children.length - 1 && button === buttons[1])
      buttons[1].style.visibility = 'hidden';
  });
});

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 2019-10-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多