我有一个带有 .images类以及上一个和下一个按钮的滑块。
我在JavaScript中定义了这样的颜色:
let colors = ['red', 'green',];
当前,当我单击下一步按钮时,显示红色。 (下面的功能)。
function nextSlide() {
container.style.backgroundColor = colors[0];
我想完成的是当您单击next按钮时,它将始终显示let colors数组中的下一个颜色(或这种定义颜色的方法)。相反,当您单击上一个按钮时,滑块应显示数组中的上一个颜色。
您可以在下面找到完整的源代码。
const nextBtn = document.querySelector('.nextBtn');
const prevBtn = document.querySelector('.prevBtn');
const container = document.querySelector('.images');
let colors = ['red', 'blue',];
nextBtn.addEventListener('click', nextSlide);
prevBtn.addEventListener('click', prevSlide);
function nextSlide() {
container.style.backgroundColor = colors[0];
}
function prevSlide() {
container.style.backgroundColor = colors[1];
}
body {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background-color: lightblue;
}
.images {
background-color: #4047c9;
flex: 0 0 80%;
min-height: 70vh;
border-radius: 10px;
position: relative;
}
.btn {
display: inline-block;
background: white;
color: black;
padding: 10px;
border: none;
cursor: pointer;
}
.prevBtn {
position: absolute;
top: 50%;
left: 0;
transform: translate(-50%, -50%);
-webkit-transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
}
.nextBtn {
position: absolute;
top: 50%;
right: 0;
transform: translate(50%, -50%);
-webkit-transform: translate(50%, -50%);
-moz-transform: translate(50%, -50%);
-ms-transform: translate(50%, -50%);
}
.btn:active {
background-color: grey;
color: white;
}
.btn:hover {
background-color: grey;
color: white;
}
<div class="images">
<button type="button" class="btn prevBtn">Prev Btn</button>
<button type="button" class="btn nextBtn">Next Btn</button>
</div>
答案 0 :(得分:1)
创建一个计数器,并在每个函数调用时基于上一个或下一个调用对其进行递增或递减。设置条件,使其不会变为负数且不会超出数组的长度,并使用此计数器作为颜色数组的索引来赋予颜色
const nextBtn = document.querySelector('.nextBtn');
const prevBtn = document.querySelector('.prevBtn');
const container = document.querySelector('.images');
let colors = ['red', 'blue','green','yellow'];
nextBtn.addEventListener('click', nextSlide);
prevBtn.addEventListener('click', prevSlide);
var i=0;
function nextSlide() {
if(i>=colors.length-1)
i=0;
if(i<0)
i=colors.length-1;
container.style.backgroundColor = colors[i++];
}
function prevSlide() {
if(i>=colors.length-1)
i=0;
if(i<0)
i=colors.length-1;
container.style.backgroundColor = colors[i--];
}
body {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background-color: lightblue;
}
.images {
background-color: #4047c9;
flex: 0 0 80%;
min-height: 70vh;
border-radius: 10px;
position: relative;
}
.btn {
display: inline-block;
background: white;
color: black;
padding: 10px;
border: none;
cursor: pointer;
}
.prevBtn {
position: absolute;
top: 50%;
left: 0;
transform: translate(-50%, -50%);
}
.nextBtn {
position: absolute;
top: 50%;
right: 0;
transform: translate(50%, -50%);
}
.btn:active {
background-color: grey;
color: white;
}
.btn:hover {
background-color: grey;
color: white;
}
<div class="images">
<button type="button" class="btn prevBtn">Prev Btn</button>
<button type="button" class="btn nextBtn">Next Btn</button>
</div>
答案 1 :(得分:1)
如果您希望单击后的最后一张幻灯片也转到第一张,而单击左键时第一张幻灯片转到最后一张,则可以使用模数技巧。
slideslength + currentslidenumber + directions %(modulus) slidelength
下面是一个例子。
const nextBtn = document.querySelector('.nextBtn');
const prevBtn = document.querySelector('.prevBtn');
const container = document.querySelector('.images');
let colors = ['red', 'green', 'blue',];
let currentSlide = 0;
function updateSlide(direction) {
currentSlide =
(colors.length + currentSlide + direction)
% colors.length;
container.style.backgroundColor = colors[currentSlide];
}
updateSlide(0);
nextBtn.addEventListener('click', nextSlide);
prevBtn.addEventListener('click', prevSlide);
function nextSlide() {
updateSlide(+1);
}
function prevSlide() {
updateSlide(-1);
}
body {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background-color: lightblue;
}
.images {
background-color: #4047c9;
flex: 0 0 80%;
min-height: 70vh;
border-radius: 10px;
position: relative;
}
.btn {
display: inline-block;
background: white;
color: black;
padding: 10px;
border: none;
cursor: pointer;
}
.prevBtn {
position: absolute;
top: 50%;
left: 0;
transform: translate(-50%, -50%);
}
.nextBtn {
position: absolute;
top: 50%;
right: 0;
transform: translate(50%, -50%);
}
.btn:active {
background-color: grey;
color: white;
}
.btn:hover {
background-color: grey;
color: white;
}
<div class="images">
<button type="button" class="btn prevBtn">Prev Btn</button>
<button type="button" class="btn nextBtn">Next Btn</button>
</div>
答案 2 :(得分:1)
/home/myuser/files/sheet.tsv IN_MODIFY /home/myuser/test.sh
答案 3 :(得分:0)
您快到了,只需实现一个index
来存储您的颜色阵列的当前位置:
const nextBtn = document.querySelector('.nextBtn');
const prevBtn = document.querySelector('.prevBtn');
const container = document.querySelector('.images');
let colors = ['red', 'blue', 'yellow', 'green'];
let index = 0;
let length = colors.length;
nextBtn.addEventListener('click', nextSlide);
prevBtn.addEventListener('click', prevSlide);
function changeColor() {
container.style.backgroundColor = colors[index];
}
function nextSlide() {
if(index == length - 1){
index = 0;
}else{
index++;
}
changeColor();
}
function prevSlide() {
if(index == 0){
index = length - 1;
}else {
index--;
}
changeColor();
}
body {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background-color: lightblue;
}
.images {
background-color: #4047c9;
flex: 0 0 80%;
min-height: 70vh;
border-radius: 10px;
position: relative;
}
.btn {
display: inline-block;
background: white;
color: black;
padding: 10px;
border: none;
cursor: pointer;
}
.prevBtn {
position: absolute;
top: 50%;
left: 0;
transform: translate(-50%, -50%);
}
.nextBtn {
position: absolute;
top: 50%;
right: 0;
transform: translate(50%, -50%);
}
.btn:active {
background-color: grey;
color: white;
}
.btn:hover {
background-color: grey;
color: white;
}
<div class="images">
<button type="button" class="btn prevBtn">Prev Btn</button>
<button type="button" class="btn nextBtn">Next Btn</button>
</div>