|
|
|
|
|
let currentStep = 1; |
|
|
const totalSteps = 51; |
|
|
|
|
|
|
|
|
const availableImages = { |
|
|
1: 'assets/step1.jpg', |
|
|
2: 'assets/step2.jpg', |
|
|
3: 'assets/step3.jpg', |
|
|
4: 'assets/step4.jpg', |
|
|
5: 'assets/step5.jpg', |
|
|
6: 'assets/step6.jpg', |
|
|
7: 'assets/step7.jpg', |
|
|
8: 'assets/step8.jpg', |
|
|
9: 'assets/step9.jpg', |
|
|
10: 'assets/step10.jpg', |
|
|
11: 'assets/step11.jpg', |
|
|
12: 'assets/step12.jpg', |
|
|
13: 'assets/step13.jpg', |
|
|
14: 'assets/step14.jpg', |
|
|
15: 'assets/step15.jpg', |
|
|
16: 'assets/step16.jpg', |
|
|
17: 'assets/step17.jpg', |
|
|
18: 'assets/step18.jpg', |
|
|
19: 'assets/step19.jpg', |
|
|
20: 'assets/step20.jpg', |
|
|
21: 'assets/step21.jpg', |
|
|
22: 'assets/step22.jpg', |
|
|
23: 'assets/step23.jpg', |
|
|
24: 'assets/step24.jpg', |
|
|
25: 'assets/step25.jpg', |
|
|
26: 'assets/step26.jpg', |
|
|
27: 'assets/step27.jpg', |
|
|
28: 'assets/step28.jpg', |
|
|
29: 'assets/step29.jpg', |
|
|
30: 'assets/step30.jpg', |
|
|
31: 'assets/step31.jpg', |
|
|
32: 'assets/step32.jpg', |
|
|
33: 'assets/step33.jpg', |
|
|
34: 'assets/step34.jpg', |
|
|
35: 'assets/step35.jpg', |
|
|
36: 'assets/step36.jpg', |
|
|
37: 'assets/step37.jpg', |
|
|
38: 'assets/step38.jpg', |
|
|
39: 'assets/step39.jpg', |
|
|
40: 'assets/step40.jpg', |
|
|
41: 'assets/step41.jpg', |
|
|
42: 'assets/step42.jpg', |
|
|
43: 'assets/step43.jpg', |
|
|
44: 'assets/step44.jpg', |
|
|
45: 'assets/step45.jpg', |
|
|
46: 'assets/step46.jpg', |
|
|
47: 'assets/step47.jpg', |
|
|
48: 'assets/step48.jpg', |
|
|
49: 'assets/step49.jpg', |
|
|
50: 'assets/step50.jpg', |
|
|
51: 'assets/step51.jpg', |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
const stepDisplay = document.getElementById('stepDisplay'); |
|
|
const stepImage = document.getElementById('stepImage'); |
|
|
const placeholderText = document.getElementById('placeholderText'); |
|
|
const placeholderNumber = document.getElementById('placeholderNumber'); |
|
|
const placeholderStep = document.getElementById('placeholderStep'); |
|
|
const prevBtn = document.getElementById('prevBtn'); |
|
|
const nextBtn = document.getElementById('nextBtn'); |
|
|
const progressFill = document.getElementById('progressFill'); |
|
|
const indicatorsContainer = document.getElementById('indicators'); |
|
|
|
|
|
|
|
|
function init() { |
|
|
createIndicators(); |
|
|
updateDisplay(); |
|
|
} |
|
|
|
|
|
|
|
|
function createIndicators() { |
|
|
const indicatorsToShow = Math.min(totalSteps, 10); |
|
|
|
|
|
for (let i = 0; i < indicatorsToShow; i++) { |
|
|
const button = document.createElement('button'); |
|
|
button.className = 'indicator'; |
|
|
button.setAttribute('aria-label', `Go to step ${i + 1}`); |
|
|
button.addEventListener('click', () => { |
|
|
const targetStep = Math.floor((currentStep - 1) / 10) * 10 + i + 1; |
|
|
if (targetStep <= totalSteps) { |
|
|
goToStep(targetStep); |
|
|
} |
|
|
}); |
|
|
indicatorsContainer.appendChild(button); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function updateIndicators() { |
|
|
const indicators = indicatorsContainer.children; |
|
|
const startStep = Math.floor((currentStep - 1) / 10) * 10 + 1; |
|
|
|
|
|
Array.from(indicators).forEach((indicator, i) => { |
|
|
const step = startStep + i; |
|
|
if (step > totalSteps) { |
|
|
indicator.style.display = 'none'; |
|
|
} else { |
|
|
indicator.style.display = 'block'; |
|
|
indicator.classList.toggle('active', step === currentStep); |
|
|
} |
|
|
}); |
|
|
} |
|
|
|
|
|
|
|
|
function updateDisplay() { |
|
|
|
|
|
stepDisplay.textContent = `Step ${currentStep}/${totalSteps}`; |
|
|
|
|
|
|
|
|
if (availableImages[currentStep]) { |
|
|
stepImage.src = availableImages[currentStep]; |
|
|
stepImage.alt = `Assembly step ${currentStep}`; |
|
|
stepImage.style.display = 'block'; |
|
|
placeholderText.style.display = 'none'; |
|
|
} else { |
|
|
stepImage.style.display = 'none'; |
|
|
placeholderText.style.display = 'block'; |
|
|
placeholderNumber.textContent = currentStep; |
|
|
placeholderStep.textContent = currentStep; |
|
|
} |
|
|
|
|
|
|
|
|
prevBtn.disabled = currentStep === 1; |
|
|
nextBtn.disabled = currentStep === totalSteps; |
|
|
|
|
|
|
|
|
const progress = (currentStep / totalSteps) * 100; |
|
|
progressFill.style.width = `${progress}%`; |
|
|
|
|
|
|
|
|
updateIndicators(); |
|
|
} |
|
|
|
|
|
|
|
|
function goToStep(step) { |
|
|
if (step >= 1 && step <= totalSteps) { |
|
|
currentStep = step; |
|
|
updateDisplay(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function nextStep() { |
|
|
if (currentStep < totalSteps) { |
|
|
currentStep++; |
|
|
updateDisplay(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function prevStep() { |
|
|
if (currentStep > 1) { |
|
|
currentStep--; |
|
|
updateDisplay(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
nextBtn.addEventListener('click', nextStep); |
|
|
prevBtn.addEventListener('click', prevStep); |
|
|
|
|
|
|
|
|
document.addEventListener('keydown', (e) => { |
|
|
if (e.key === 'ArrowRight') { |
|
|
nextStep(); |
|
|
} else if (e.key === 'ArrowLeft') { |
|
|
prevStep(); |
|
|
} |
|
|
}); |
|
|
|
|
|
|
|
|
init(); |
|
|
|