无法使用多个 ul 列表的滑块

Not working slider with multiple ul lists

我在使用多个 ul 列表制作工作滑块时遇到问题。我正在使用滑动滑块,但无法制作我想要的东西。我想知道单击菜单时是否可以更改滑块。例如,如果您单击“蓝色”,您将获得带有蓝色图像的滑块,而当您单击“绿色”时,您将获得绿色图像。

const menu = document.querySelectorAll('.menu li')
const red = document.querySelector('.red')
const blue = document.querySelector('.blue')
const green = document.querySelector('.green')

const pickColor = (e) => {
    const origin = e.target;


    if (origin.dataset.colorName === "red") {
        red.classList.remove('is-hidden')
        blue.classList.add('is-hidden')
        green.classList.add('is-hidden')


    } else if (origin.dataset.colorName === "blue") {
        red.classList.add('is-hidden')
        blue.classList.remove('is-hidden')
        green.classList.add('is-hidden')
    } else if (origin.dataset.colorName === "green") {
        red.classList.add('is-hidden')
        blue.classList.add('is-hidden')
        green.classList.remove('is-hidden')
    }

}
menu.forEach(li => {
    li.addEventListener('click', pickColor)
})
ul li{
    cursor: pointer;
}
.menu{
    display: flex;
    list-style-type: none;
    margin-right: 50px;
  }
  .menu li{
    margin-right: 50px;
  }
  .is-hidden{
    display:none !important;
  }
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@splidejs/splide@latest/dist/css/splide.min.css">
    <link rel="stylesheet" href="style.css">
</head>

<body>
    <nav>
        <ul class="menu">
            <li data-color-name="red">red</li>
            <li data-color-name="blue">blue</li>
            <li data-color-name="green">green</li>
        </ul>
        <div class="splide">
            <div class="splide__track">
                <ul class="splide__list red">
                    <li class="splide__slide"><img src="https://via.placeholder.com/150/FF0000/" alt=""></li>
                    <li class="splide__slide"><img src="https://via.placeholder.com/150/FF0000/" alt=""></li>
                    <li class="splide__slide"><img src="https://via.placeholder.com/150/FF0000/" alt=""></li>
                    <li class="splide__slide"><img src="https://via.placeholder.com/150/FF0000/" alt=""></li>
                    <li class="splide__slide"><img src="https://via.placeholder.com/150/FF0000/" alt=""></li>
                </ul>
                <ul class="splide__list is-hidden blue">
                    <li class="splide__slide"><img src="https://via.placeholder.com/150/0000FF/" alt=""></li>
                    <li class="splide__slide"><img src="https://via.placeholder.com/150/0000FF/" alt=""></li>
                    <li class="splide__slide"><img src="https://via.placeholder.com/150/0000FF/" alt=""></li>
                    <li class="splide__slide"><img src="https://via.placeholder.com/150/0000FF/" alt=""></li>
                    <li class="splide__slide"><img src="https://via.placeholder.com/150/0000FF/" alt=""></li>
                </ul>
                <ul class="splide__list is-hidden green">
                    <li class="splide__slide"><img src="https://via.placeholder.com/150/008000/" alt=""></li>
                    <li class="splide__slide"><img src="https://via.placeholder.com/150/008000/" alt=""></li>
                    <li class="splide__slide"><img src="https://via.placeholder.com/150/008000/" alt=""></li>
                    <li class="splide__slide"><img src="https://via.placeholder.com/150/008000/" alt=""></li>
                    <li class="splide__slide"><img src="https://via.placeholder.com/150/008000/" alt=""></li>
                </ul>
            </div>
        </div>
    </nav>
    <script src="https://cdn.jsdelivr.net/npm/@splidejs/splide@latest/dist/js/splide.min.js"></script>
    <script>
        document.addEventListener('DOMContentLoaded', () => {
            new Splide('.splide', {
                perPage: 3,
                perMove: 1,
            }).mount();

        });
    </script>

    <script src="index.js"></script>
</body>

</html>

如有不明之处欢迎随时提问:)

虽然我从未使用过 splide,但我看到了你的问题。 在您的代码中不起作用的是您对所有幻灯片都有一组控件。 您需要将幻灯片分开并赋予它们唯一性 类.

所以不用

<div class="splide">
     <div class="splide__track">
         <ul class="splide__list red">
                ...
         </ul>
         <ul class="splide__list is-hidden blue">
                ...
         </ul>
         <ul class="splide__list is-hidden green">
                ...
         </ul>
     </div>
 </div>

 <div class="splide1">
     <div class="splide__track">
         <ul class="splide__list red">
                ...
         </ul>
     </div>
 </div>
 <div class="splide2">
     <div class="splide__track">
         <ul class="splide__list is-hidden blue">
                ...
         </ul>
     </div>
 </div>
 <div class="splide3">
     <div class="splide__track">
         <ul class="splide__list is-hidden green">
                ...
         </ul>
     </div>
 </div>

并改变

new Splide('.splide', {
            perPage: 3,
            perMove: 1,
        }).mount();

new Splide('.splide1', {
            perPage: 3,
            perMove: 1,
        }).mount();
new Splide('.splide2', {
            perPage: 3,
            perMove: 1,
        }).mount();
new Splide('.splide13', {
            perPage: 3,
            perMove: 1,
        }).mount();

并在您的 JS 中替换选择器

const red = document.querySelector('.splide1')
const blue = document.querySelector('.splide2')
const green = document.querySelector('.splide3')

Zergski 看到了这个问题,但实际上更棘手。
我们需要的不止于此。简而言之,这是一个工作版本:

      [Codepen] https://codepen.io/vanco-pham/pen/abBRQPG


我改变了HTML结构,增加了一点CSS和JavaScript。如果您想要更详细的信息,可以尝试 Zergski 解决方案以查看差异。