modified: begushiybashkir/src/index.html
modified: begushiybashkir/src/scripts/script.js modified: begushiybashkir/src/style/mobile.css modified: begushiybashkir/src/style/slider.css add controls button to slider
This commit is contained in:
@@ -285,10 +285,16 @@
|
|||||||
alt="Беговой клуб, общее фото"
|
alt="Беговой клуб, общее фото"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="slider-controls">
|
<div class="slider-controls">
|
||||||
<button class="slider-prev">←</button>
|
<button class="slider-prev">←</button>
|
||||||
<button class="slider-next">→</button>
|
<button class="slider-next">→</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="slider-indicator" id="sliderIndicator">
|
||||||
|
<!-- точки будут добавлены через JavaScript -->
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@@ -11,40 +11,74 @@ window.onload = () => {
|
|||||||
const slides = document.querySelectorAll('.slider img');
|
const slides = document.querySelectorAll('.slider img');
|
||||||
const prevBtn = document.querySelector('.slider-prev');
|
const prevBtn = document.querySelector('.slider-prev');
|
||||||
const nextBtn = document.querySelector('.slider-next');
|
const nextBtn = document.querySelector('.slider-next');
|
||||||
|
const indicatorContainer = document.getElementById('sliderIndicator');
|
||||||
let currentSlide = 0;
|
let currentSlide = 0;
|
||||||
const slideCount = slides.length;
|
const slideCount = slides.length;
|
||||||
|
|
||||||
|
// Создаем индикаторы (точки)
|
||||||
|
function createIndicators() {
|
||||||
|
for (let i = 0; i < slideCount; i++) {
|
||||||
|
const dot = document.createElement('div');
|
||||||
|
dot.classList.add('slider-dot');
|
||||||
|
if (i === 0) dot.classList.add('active');
|
||||||
|
|
||||||
|
dot.addEventListener('click', () => {
|
||||||
|
currentSlide = i;
|
||||||
|
updateSlider();
|
||||||
|
});
|
||||||
|
|
||||||
|
indicatorContainer.appendChild(dot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function updateSlider() {
|
function updateSlider() {
|
||||||
const offset = -currentSlide * 100; // Сдвигаем контейнер
|
const offset = -currentSlide * 100;
|
||||||
sliderContainer.style.transform = `translateX(${offset}%)`;
|
sliderContainer.style.transform = `translateX(${offset}%)`;
|
||||||
|
|
||||||
|
// Обновляем активную точку
|
||||||
|
document.querySelectorAll('.slider-dot').forEach((dot, index) => {
|
||||||
|
dot.classList.toggle('active', index === currentSlide);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
nextBtn.addEventListener('click', () => {
|
nextBtn.addEventListener('click', () => {
|
||||||
currentSlide = (currentSlide + 1) % slideCount;
|
currentSlide = (currentSlide + 1) % slideCount;
|
||||||
updateSlider();
|
updateSlider();
|
||||||
|
resetAutoSlide(); // Сброс автослайда при ручном управлении
|
||||||
});
|
});
|
||||||
|
|
||||||
prevBtn.addEventListener('click', () => {
|
prevBtn.addEventListener('click', () => {
|
||||||
currentSlide = (currentSlide - 1 + slideCount) % slideCount;
|
currentSlide = (currentSlide - 1 + slideCount) % slideCount;
|
||||||
updateSlider();
|
updateSlider();
|
||||||
|
resetAutoSlide(); // Сброс автослайда при ручном управлении
|
||||||
});
|
});
|
||||||
|
|
||||||
// Автопрокрутка
|
// Автопрокрутка
|
||||||
let slideInterval = setInterval(() => {
|
let slideInterval;
|
||||||
currentSlide = (currentSlide + 1) % slideCount;
|
|
||||||
updateSlider();
|
|
||||||
}, 5000);
|
|
||||||
|
|
||||||
|
function startAutoSlide() {
|
||||||
|
slideInterval = setInterval(() => {
|
||||||
|
currentSlide = (currentSlide + 1) % slideCount;
|
||||||
|
updateSlider();
|
||||||
|
}, 5000);
|
||||||
|
}
|
||||||
|
|
||||||
|
function resetAutoSlide() {
|
||||||
|
clearInterval(slideInterval);
|
||||||
|
startAutoSlide();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Останавливаем автослайд при наведении
|
||||||
sliderContainer.addEventListener('mouseenter', () => {
|
sliderContainer.addEventListener('mouseenter', () => {
|
||||||
clearInterval(slideInterval);
|
clearInterval(slideInterval);
|
||||||
});
|
});
|
||||||
|
|
||||||
sliderContainer.addEventListener('mouseleave', () => {
|
sliderContainer.addEventListener('mouseleave', () => {
|
||||||
slideInterval = setInterval(() => {
|
startAutoSlide();
|
||||||
currentSlide = (currentSlide + 1) % slideCount;
|
|
||||||
updateSlider();
|
|
||||||
}, 5000);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Инициализация
|
||||||
|
createIndicators();
|
||||||
updateSlider();
|
updateSlider();
|
||||||
|
startAutoSlide();
|
||||||
};
|
};
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
/* Адаптивность для мобильных */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.slider-controls {
|
||||||
|
bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-prev, .slider-next {
|
||||||
|
width: 35px;
|
||||||
|
height: 35px;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-indicator {
|
||||||
|
bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-dot {
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -23,4 +23,60 @@
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
object-fit: cover; /* Сохраняет пропорции, обрезает лишнее */
|
object-fit: cover; /* Сохраняет пропорции, обрезает лишнее */
|
||||||
object-position: center; /* Центрирует изображение */
|
object-position: center; /* Центрирует изображение */
|
||||||
|
}
|
||||||
|
/* Кнопки управления слайдером */
|
||||||
|
.slider-controls {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 20px;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
display: flex;
|
||||||
|
gap: 20px;
|
||||||
|
z-index: 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-prev, .slider-next {
|
||||||
|
background-color: rgba(0, 0, 0, 0.7);
|
||||||
|
color: white;
|
||||||
|
border: 2px solid white;
|
||||||
|
border-radius: 50%;
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
font-size: 18px;
|
||||||
|
cursor: pointer;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-prev:hover, .slider-next:hover {
|
||||||
|
background-color: rgba(255, 255, 255, 0.9);
|
||||||
|
color: black;
|
||||||
|
transform: scale(1.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Индикатор текущего слайда */
|
||||||
|
.slider-indicator {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 10px;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
display: flex;
|
||||||
|
gap: 8px;
|
||||||
|
z-index: 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-dot {
|
||||||
|
width: 12px;
|
||||||
|
height: 12px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: rgba(255, 255, 255, 0.5);
|
||||||
|
cursor: pointer;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-dot.active {
|
||||||
|
background-color: white;
|
||||||
|
transform: scale(1.2);
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user