Как оптимизировать слайдер?
Есть слайдер, необходимо его оптимизировать, чтобы слайды подгружались по надобности. То есть, когда нажимаешь на стрелочку вперед, отрисовывался слайд, а предыдущий удалялся. Я знаю как это делается, но мой слайдер двигается при помощи transform и, когда я удаляю предыдущий слайд, текущий сдвигается влево.
Также отдельным вопросом остается как реализовать отрисовку слайдов сзади.
Код:
let productsImages = document.querySelectorAll('.images-image');
let sliderLine = document.querySelector('.slider__images');
let nextArrow = document.querySelector('.arrow-next');
let prevArrow = document.querySelector('.arrow-prev');
let productsSrc = [];
let productsStep = 0;
let productsOffset = 0;
let imageWidth = document.querySelector('.images__inner').offsetWidth + 2;
sliderLine.style.width = imageWidth + "px";
for (let i = 0; i < productsImages.length; i++) {
productsSrc[i] = productsImages[i].src;
productsImages[i].remove();
};
function productsDraw() {
let productsImg = document.createElement('img');
productsImg.src = productsSrc[productsStep];
productsImg.classList.add('images-image');
productsImg.style.width = imageWidth + "px";
sliderLine.appendChild(productsImg);
sliderLine.style.transform = 'translateX(-' + (productsOffset * imageWidth) + 'px)';
};
function productsNextSlide() {
productsStep++;
productsOffset++;
if (productsStep >= productsImages.length) {
productsStep = 0;
}
if (sliderLine.children.length != productsImages.length) {
productsDraw();
setTimeout(() => {
sliderLine.children[0].remove();
}, 1000);
console.log(sliderLine.children[0]);
}
}
function productsPrevSlide() {
productsStep++;
productsOffset--;
if (productsOffset < 0) {
productsOffset = sliderLine.children.length;
}
productsDraw();
}
productsDraw();
nextArrow.onclick = productsNextSlide;
prevArrow.onclick = () => {
productsSrc.reverse();
productsPrevSlide();
};
*,
::before,
::after {
box-sizing: border-box;
}
body {
font-family: 'montserrat', sans-serif;
margin: 0;
padding: 0;
color: #fff;
text-transform: uppercase;
}
img {
padding: 0;
margin: 0;
outline: none;
border: none;
}
.products {
padding-top: 70px;
text-align: left;
position: relative;
height: 100%;
background-color: #fff6e4;
color: #000;
}
.products__inner {
padding: 5% 50px;
}
.products__slider {
display: flex;
align-items: center;
justify-content: center;
}
.arrow {
width: 50px;
height: 50px;
background: red;
}
.arrow:last-child {
margin-left: 20px;
}
.arrow:first-child {
margin-right: 20px;
transform: rotate(180deg);
}
.images__inner {
max-width: 56%;
border-radius: 13px;
overflow: hidden;
background-color: rgba(249, 218, 170, 0.596);
}
.slider__images {
display: flex;
align-items: center;
transition: all .5s;
}
.images-image {
height: 100%;
}
```
<!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">
<link rel="stylesheet" href="style.css">
<title>slider</title>
</head>
<body>
<section class="products">
<div class="products__inner">
<div class="products__slider">
<div class="arrow arrow-prev"></div>
<div class="images__inner">
<div class="slider__images">
<img class="images-image active" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
<img class="images-image" src="https://picsum.photos/200/300" alt="">
</div>
</div>
<div class="arrow arrow-next"></div>
</div>
</div>
</section>
<script src="main.js"></script>
</body>
</html>