Слайдер карусель
Доброго времени суток, пытаюсь сделать слайдер карусель, помогите разобраться.
При клике в право все работает как надуманно, но вот запрограммировать вторую кнопку (клик влево) не могу, не получается правильно написать алгоритм действий, который будет высчитывать текущее значение transition, и соответственно увеличивать его на ширину слайда. Короче говоря функцию sliderScrollLeft() не получается правильно запрограммировать. Возможно весь алгоритм написан не верно, прошу помощи, спасибо. <div class="slider"> <div class="slider__btn slider__btn_left"></div> <div class="slider__btn slider__btn_right"></div> <div class="slider__container"> <div class="slider__scroll"> <div class="slider__item"></div> <div class="slider__item"></div> <div class="slider__item"></div> </div> </div> </div> var sliderBtnLeft = document.querySelector('.slider__btn_left'); var sliderBtnRight = document.querySelector('.slider__btn_right'); var sliderContainer = document.querySelector('.slider__container').offsetWidth; var sliderItems = document.querySelectorAll('.slider__item'); var sliderScroll = document.querySelector('.slider__scroll'); var sliderContainerIndex = sliderContainer; var sliderIndex = 0; function sliderScrollRight(){ if(sliderIndex < sliderItems.length - 1){ sliderScroll.style.transform = 'translateX(-' + sliderContainerIndex + 'px)'; sliderContainerIndex += sliderContainer; sliderIndex++; } else{ sliderIndex = 0; sliderContainerIndex = sliderContainer; sliderScroll.style.transform = 'translateX(0)'; } } function sliderScrollLeft(){ } sliderBtnRight.onclick = sliderScrollRight; sliderBtnLeft.onclick = sliderScrollLeft; |
CSS если нужно
.slider{ position: relative; } .slider__container{ white-space: nowrap; overflow: hidden; max-width: 790px; margin: 0 auto; } .slider__scroll{ position: relative; left: 0; transform: translateX(0); transition: all 0.4s ease-in-out; display: inline-block; white-space: nowrap; } .slider__item{ display: inline-block; margin: 0 30px; } По задумке в самих слайдах может быть любой контент |
Простейший слайдер
TheSanches,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> .slider{ position: relative; } .slider__container{ white-space: nowrap; overflow: hidden; max-width: 790px; margin: 0 auto; border: 1px solid #0000FF; } .slider__scroll{ position: relative; left: 0; transform: translateX(0); transition: all 0.4s ease-in-out; display: inline-block; white-space: nowrap; } .slider__item{ display: inline-block; margin: 0 30px; width: 300px; height: 100px; background-color: #FF1493; } .slider__item:nth-child(2){ width: 500px; background-color: #32CD32; } </style> </head> <body> <div class="slider"> <div class="slider__btn slider__btn_left">left</div> <div class="slider__btn slider__btn_right">right</div> <div class="slider__container"> <div class="slider__scroll"> <div class="slider__item">1</div> <div class="slider__item">2</div> <div class="slider__item">3</div> </div> </div> </div> <script> var sliderBtnLeft = document.querySelector('.slider__btn_left'); var sliderBtnRight = document.querySelector('.slider__btn_right'); var sliderContainer = document.querySelector('.slider__container'); var sliderItems = document.querySelectorAll('.slider__item'); var sliderIndex = 0; var sliderScroll = document.querySelector('.slider__scroll'); var Width = 0; function sliderMove(up){ sliderIndex = (sliderIndex + up + sliderItems.length) % sliderItems.length; Width = 0; for (var i = 0; i < sliderIndex; i++) { Width += sliderItems[i].offsetWidth + 60 } sliderScroll.style.transform = 'translateX(-' + Width + 'px)'; } sliderBtnRight.onclick = sliderMove.bind(null, 1); sliderBtnLeft.onclick = sliderMove.bind(null, -1); </script> </body> </html> |
Да уж, я был далек от решения, большое спасибо.
|
Возник еще один вопрос, я прикрутил точки к слайдеру, но не могу сделать чтобы они были кликабельны, то-есть чтобы можно было с помощью них тоже прокручивать слайдер, ниже код который уже есть.
Спасибо еще раз. <div class="slider__dots"> <span class="slider__dots-item slider__dots-item_active"></span> <span class="slider__dots-item"></span> <span class="slider__dots-item"></span> </div> .slider__dots-item{ width: 13px; height: 13px; border: 1px solid black; display: inline-block; border-radius: 50%; margin-right: 5px; cursor: pointer; transition: all 0.4s; } .slider__dots-item.slider__dots-item_active{ background: black; transition: all 0.4s; } .slider__dots-item:last-child{ margin-right: 0; } .slider__dots-item:hover{ background: black; } // получаем кнопки var sliderBtnLeft = document.querySelector('.slider__btn_left'); var sliderBtnRight = document.querySelector('.slider__btn_right'); var sliderContainer = document.querySelector('.slider__container').offsetWidth; var sliderItems = document.querySelectorAll('.slider__item'); var sliderScroll = document.querySelector('.slider__scroll'); var sliderDots = document.querySelectorAll('.slider__dots-item'); //кружочки var sliderIndex = 0; var Width = 0; function sliderMove(up){ sliderIndex = (sliderIndex + up + sliderItems.length) % sliderItems.length; Width = 0; for (var i = 0; i < sliderIndex; i++) { Width += sliderItems[i].offsetWidth + 65 } sliderScroll.style.transform = 'translateX(-' + Width + 'px)'; //добавляем кружочки for (var j = 0; j < sliderDots.length; j++) { sliderDots[j].classList.remove('slider__dots-item_active'); sliderDots[sliderIndex].classList.add('slider__dots-item_active'); } } sliderBtnRight.onclick = sliderMove.bind(null, 1); sliderBtnLeft.onclick = sliderMove.bind(null, -1); |
TheSanches,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> .slider{ position: relative; } .slider__container{ white-space: nowrap; overflow: hidden; max-width: 790px; margin: 0 auto; border: 1px solid #0000FF; } .slider__scroll{ position: relative; left: 0; transform: translateX(0); transition: all 0.4s ease-in-out; display: inline-block; white-space: nowrap; } .slider__item{ display: inline-block; margin: 0 30px; width: 300px; height: 100px; background-color: #FF1493; } .slider__item:nth-child(2){ width: 500px; background-color: #32CD32; } .slider__dots-item{ width: 13px; height: 13px; border: 1px solid black; display: inline-block; border-radius: 50%; margin-right: 5px; cursor: pointer; transition: all 0.4s; } .slider__dots-item.slider__dots-item_active{ background: black; transition: all 0.4s; } .slider__dots-item:last-child{ margin-right: 0; } .slider__dots-item:hover{ background: black; } </style> </head> <body> <div class="slider"> <div class="slider__btn slider__btn_left">left</div> <div class="slider__btn slider__btn_right">right</div> <div class="slider__container"> <div class="slider__scroll"> <div class="slider__item">1</div> <div class="slider__item">2</div> <div class="slider__item">3</div> </div> </div> <div class="slider__dots"> <span class="slider__dots-item slider__dots-item_active"></span> <span class="slider__dots-item"></span> <span class="slider__dots-item"></span> </div> </div> <script> var sliderBtnLeft=document.querySelector('.slider__btn_left'); var sliderBtnRight=document.querySelector('.slider__btn_right'); var sliderDots = document.querySelectorAll('.slider__dots-item'); //кружочки var sliderItems=document.querySelectorAll('.slider__item'); var sliderIndex=0; var sliderScroll=document.querySelector('.slider__scroll'); var Width=0; function sliderMove(up) { sliderDots[sliderIndex].classList.remove('slider__dots-item_active'); sliderIndex=(sliderIndex + up + sliderItems.length)% sliderItems.length; sliderDots[sliderIndex].classList.add('slider__dots-item_active'); Width=0; for(var i=0;i < sliderIndex;i++) { Width +=sliderItems[i].offsetWidth + 60 } sliderScroll.style.transform='translateX(-' + Width + 'px)'; } function dotMove(i) { sliderMove(i - sliderIndex); } [...sliderDots].forEach((dot, i) => dot.addEventListener('click', dotMove.bind(dot, i))); sliderBtnRight.onclick=sliderMove.bind(null,1); sliderBtnLeft.onclick=sliderMove.bind(null,-1); </script> </body> </html> |
И опять я был далек от решения))
Большое спасибо еще раз. |
Часовой пояс GMT +3, время: 14:52. |