| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- (function () {
- var DUR = 900;
- var AUTO_DELAY = 5500;
- var slides = Array.from(document.querySelectorAll('.hs-slide'));
- var dots = Array.from(document.querySelectorAll('.hs-dot'));
- var prevBtn = document.getElementById('hsArr-prev');
- var nextBtn = document.getElementById('hsArr-next');
- var numEl = document.getElementById('hsNum');
- var current = 0;
- var animating = false;
- var autoTimer = null;
- var rafId = null;
- var progStart = null;
- /* ── Progress bar ──────────────────────────── */
- function startProgress() {
- cancelAnimationFrame(rafId);
- progStart = null;
- rafId = requestAnimationFrame(tick);
- }
- function tick(now) {
- if (!progStart) progStart = now;
- var t = Math.min((now - progStart) / AUTO_DELAY, 1);
- if (t < 1) rafId = requestAnimationFrame(tick);
- }
- /* ── Slide transition ──────────────────────── */
- function goTo(next) {
- if (animating || next === current) return;
- animating = true;
- var leaving = slides[current];
- var entering = slides[next];
- leaving.classList.add('is-leaving');
- leaving.classList.remove('is-active');
- entering.classList.add('is-entering');
- dots[current].classList.remove('is-active');
- dots[next].classList.add('is-active');
- // Actualizar contador numérico del nav
- numEl.textContent = (next + 1) + '';
- var padded = next + 1 < 10 ? '0' + (next + 1) : '' + (next + 1);
- entering.querySelector('.hs-index').textContent = padded;
- setTimeout(function () {
- leaving.classList.remove('is-leaving');
- entering.classList.remove('is-entering');
- entering.classList.add('is-active');
- current = next;
- animating = false;
- startProgress();
- }, DUR);
- }
- /* ── Auto advance ──────────────────────────── */
- function advance(dir) {
- clearTimeout(autoTimer);
- cancelAnimationFrame(rafId);
- goTo((current + dir + slides.length) % slides.length);
- schedule();
- }
- function schedule() {
- clearTimeout(autoTimer);
- autoTimer = setTimeout(function () {
- advance(1);
- }, AUTO_DELAY);
- }
- /* ── Events ────────────────────────────────── */
- nextBtn.addEventListener('click', function () { advance(1); });
- prevBtn.addEventListener('click', function () { advance(-1); });
- dots.forEach(function (dot, i) {
- dot.addEventListener('click', function () {
- if (i === current) return;
- clearTimeout(autoTimer);
- cancelAnimationFrame(rafId);
- goTo(i);
- schedule();
- });
- });
- document.addEventListener('keydown', function (e) {
- if (e.key === 'ArrowRight') advance(1);
- if (e.key === 'ArrowLeft') advance(-1);
- });
- /* ── Init ──────────────────────────────────── */
- schedule();
- startProgress();
- })();
|