No edit summary |
No edit summary Tag: Manual revert |
||
| (36 intermediate revisions by the same user not shown) | |||
| Line 12: | Line 12: | ||
}); | }); | ||
} | } | ||
var imageRotationTimeout; // Declare this variable globally | |||
var loading = true; | |||
function setMainImage(imageHtml) { | function setMainImage(imageHtml) { | ||
var mainImageDiv = document.querySelector('.mainImage'); | var mainImageDiv = document.querySelector('.mainImage'); | ||
mainImageDiv.innerHTML = imageHtml + '<div class="loadingBar"></div>'; | |||
// 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 | function toggleLoadingBarVisibility() { | ||
loading = false; | |||
var loadingBar = document.querySelector('.loadingBar'); | var loadingBar = document.querySelector('.loadingBar'); | ||
loadingBar | if (loadingBar) { | ||
var isHidden = loadingBar.style.display === 'none'; | |||
loadingBar.style.display = isHidden ? 'block' : 'none'; | |||
} | |||
var | |||
} | |||
} | } | ||
| Line 42: | Line 49: | ||
images.forEach(function(image, index) { | images.forEach(function(image, index) { | ||
image.addEventListener('click', function() { | 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); | setMainImage(this.innerHTML); | ||
}); | }); | ||
}); | }); | ||
} | } | ||
var lastSelectedIndex = -1; | |||
var currentIndex = 0; | var currentIndex = 0; | ||
function | 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'); | 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() { | window.onload = function() { | ||
addClickEventToImages(); | 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
};