No edit summary |
No edit summary Tag: Manual revert |
||
(41 intermediate revisions by the same user not shown) | |||
Line 9: | Line 9: | ||
this.classList.toggle("active"); | this.classList.toggle("active"); | ||
var content = this.nextElementSibling; | var content = this.nextElementSibling; | ||
$(content).toggle(' | $(content).toggle('fast'); | ||
}); | }); | ||
} | } | ||
var imageRotationTimeout; // Declare this variable globally | |||
var loading = true; | |||
function setMainImage(imageHtml) { | |||
var mainImageDiv = document.querySelector('.mainImage'); | |||
// Apply the blink effect | |||
mainImageDiv.classList.add('blink'); | |||
// Delay the image update to allow the blink effect to be visible | |||
setTimeout(function() { | |||
// Set new image HTML and loading bar | |||
mainImageDiv.innerHTML = imageHtml + '<div class="loadingBar"></div>'; | |||
resetAndStartLoadingBar(); | |||
// Remove the blink class after the animation ends | |||
setTimeout(function() { | |||
mainImageDiv.classList.remove('blink'); | |||
}, 500); // Duration of the blink animation in milliseconds | |||
}, 250); // Short delay before updating the image | |||
} | |||
function toggleLoadingBarVisibility() { | |||
loading = false; | |||
var loadingBar = document.querySelector('.loadingBar'); | |||
if (loadingBar) { | |||
var isHidden = loadingBar.style.display === 'none'; | |||
loadingBar.style.display = isHidden ? 'block' : 'none'; | |||
} | |||
} | |||
function addClickEventToImages() { | |||
var images = document.querySelectorAll('.carousel .dpImage'); | |||
images.forEach(function(image, index) { | |||
image.addEventListener('click', function() { | |||
// Cancel auto rotation | |||
clearTimeout(imageRotationTimeout); | |||
// Hide the loading bar by setting its display to 'none' | |||
toggleLoadingBarVisibility(); | |||
// Set clicked image as main image | |||
setMainImage(this.innerHTML); | |||
}); | |||
}); | |||
} | |||
var lastSelectedIndex = -1; | |||
var currentIndex = 0; | |||
var rotationInterval = 10000; // 10 seconds | |||
var imageRotationTimeout; | |||
function getNextIndex(imagesLength) { | |||
var nextIndex; | |||
do { | |||
nextIndex = Math.floor(Math.random() * imagesLength); | |||
} while (nextIndex === lastSelectedIndex); | |||
return nextIndex; | |||
} | |||
function startImageRotation() { | |||
var images = document.querySelectorAll('.carousel .dpImage'); | |||
currentIndex = getNextIndex(images.length); | |||
setMainImage(images[currentIndex].innerHTML); | |||
lastSelectedIndex = currentIndex; | |||
resetAndStartLoadingBar(); | |||
// Schedule the next rotation | |||
imageRotationTimeout = setTimeout(startImageRotation, rotationInterval); | |||
} | |||
function resetAndStartLoadingBar() { | |||
if(loading) { | |||
var loadingBar = document.querySelector('.loadingBar'); | |||
loadingBar.style.transition = 'none'; // Disable transition | |||
loadingBar.style.width = '0%'; // Reset the width immediately | |||
setTimeout(function() { | |||
loadingBar.style.transition = 'width ' + rotationInterval + 'ms linear'; | |||
loadingBar.style.width = '100%'; // Start the transition | |||
}, 10); // Small delay to allow for width reset | |||
} | |||
} | |||
// Initialize | |||
window.onload = function() { | |||
addClickEventToImages(); | |||
startImageRotation(); // Start the initial rotation | |||
}; |
Latest revision as of 14:27, 1 February 2024
/* Any JavaScript here will be loaded for all users on every page load. */ var coll = document.getElementsByClassName("collapsible"); var i; for (i = 0; i < coll.length; i++) { coll[i].addEventListener("click", function() { this.classList.toggle("active"); var content = this.nextElementSibling; $(content).toggle('fast'); }); } var imageRotationTimeout; // Declare this variable globally var loading = true; function setMainImage(imageHtml) { var mainImageDiv = document.querySelector('.mainImage'); // Apply the blink effect mainImageDiv.classList.add('blink'); // Delay the image update to allow the blink effect to be visible setTimeout(function() { // Set new image HTML and loading bar mainImageDiv.innerHTML = imageHtml + '<div class="loadingBar"></div>'; resetAndStartLoadingBar(); // Remove the blink class after the animation ends setTimeout(function() { mainImageDiv.classList.remove('blink'); }, 500); // Duration of the blink animation in milliseconds }, 250); // Short delay before updating the image } function toggleLoadingBarVisibility() { loading = false; var loadingBar = document.querySelector('.loadingBar'); if (loadingBar) { var isHidden = loadingBar.style.display === 'none'; loadingBar.style.display = isHidden ? 'block' : 'none'; } } function addClickEventToImages() { var images = document.querySelectorAll('.carousel .dpImage'); images.forEach(function(image, index) { image.addEventListener('click', function() { // Cancel auto rotation clearTimeout(imageRotationTimeout); // Hide the loading bar by setting its display to 'none' toggleLoadingBarVisibility(); // Set clicked image as main image setMainImage(this.innerHTML); }); }); } var lastSelectedIndex = -1; var currentIndex = 0; var rotationInterval = 10000; // 10 seconds var imageRotationTimeout; function getNextIndex(imagesLength) { var nextIndex; do { nextIndex = Math.floor(Math.random() * imagesLength); } while (nextIndex === lastSelectedIndex); return nextIndex; } function startImageRotation() { var images = document.querySelectorAll('.carousel .dpImage'); currentIndex = getNextIndex(images.length); setMainImage(images[currentIndex].innerHTML); lastSelectedIndex = currentIndex; resetAndStartLoadingBar(); // Schedule the next rotation imageRotationTimeout = setTimeout(startImageRotation, rotationInterval); } function resetAndStartLoadingBar() { if(loading) { var loadingBar = document.querySelector('.loadingBar'); loadingBar.style.transition = 'none'; // Disable transition loadingBar.style.width = '0%'; // Reset the width immediately setTimeout(function() { loadingBar.style.transition = 'width ' + rotationInterval + 'ms linear'; loadingBar.style.width = '100%'; // Start the transition }, 10); // Small delay to allow for width reset } } // Initialize window.onload = function() { addClickEventToImages(); startImageRotation(); // Start the initial rotation };