added Core for core pages, added static files & templates.
Some checks failed
Gitea Test. / tests (push) Failing after 3s
Some checks failed
Gitea Test. / tests (push) Failing after 3s
This commit is contained in:
68
src/static/js/carousel.js
Normal file
68
src/static/js/carousel.js
Normal file
@@ -0,0 +1,68 @@
|
||||
function initCarousel(id) {
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const track = document.getElementById(id);
|
||||
const originalSlides = Array.from(track.children);
|
||||
const total = originalSlides.length;
|
||||
|
||||
if (total <= 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
const firstClone = originalSlides[0].cloneNode(true);
|
||||
const lastClone = originalSlides[total - 1].cloneNode(true);
|
||||
track.appendChild(firstClone);
|
||||
track.insertBefore(lastClone, originalSlides[0]);
|
||||
|
||||
let current = 1;
|
||||
let isTransitioning = false;
|
||||
track.style.transform = `translateX(-${current * 100}%)`;
|
||||
|
||||
const dots = document.querySelectorAll(`.${id}_dot`);
|
||||
|
||||
function updateDots(index) {
|
||||
const realIndex = (index - 1 + total) % total;
|
||||
dots.forEach((d, i) => {
|
||||
d.classList.toggle("opacity-100", i === realIndex);
|
||||
d.classList.toggle("opacity-50", i !== realIndex);
|
||||
});
|
||||
}
|
||||
|
||||
function goTo(index) {
|
||||
if (isTransitioning) return;
|
||||
isTransitioning = true;
|
||||
track.style.transition = "transform 500ms ease-in-out";
|
||||
current = index;
|
||||
track.style.transform = `translateX(-${current * 100}%)`;
|
||||
updateDots(current);
|
||||
}
|
||||
|
||||
function next() {
|
||||
goTo(current + 1);
|
||||
}
|
||||
function prev() {
|
||||
goTo(current - 1);
|
||||
}
|
||||
|
||||
track.addEventListener("transitionend", function () {
|
||||
if (current === 0) {
|
||||
track.style.transition = "none";
|
||||
current = total;
|
||||
track.style.transform = `translateX(-${current * 100}%)`;
|
||||
}
|
||||
if (current === total + 1) {
|
||||
track.style.transition = "none";
|
||||
current = 1;
|
||||
track.style.transform = `translateX(-${current * 100}%)`;
|
||||
}
|
||||
|
||||
isTransitioning = false;
|
||||
});
|
||||
|
||||
setInterval(next, 5000);
|
||||
updateDots(current);
|
||||
|
||||
window[`${id}_goTo`] = (i) => goTo(i + 1);
|
||||
window[`${id}_next`] = next;
|
||||
window[`${id}_prev`] = prev;
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user