无法使用多个 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 解决方案以查看差异。
我在使用多个 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 解决方案以查看差异。