mirror of
https://github.com/Dvorinka/Portfolio.git
synced 2026-06-03 19:32:56 +00:00
114 lines
3.1 KiB
JavaScript
114 lines
3.1 KiB
JavaScript
'use strict';
|
|
|
|
|
|
|
|
/**
|
|
* add event on element
|
|
*/
|
|
|
|
const addEventOnElem = function (elem, type, callback) {
|
|
if (elem.length > 1) {
|
|
for (let i = 0; i < elem.length; i++) {
|
|
elem[i].addEventListener(type, callback);
|
|
}
|
|
} else {
|
|
elem.addEventListener(type, callback);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* navbar toggle
|
|
*/
|
|
|
|
const navbar = document.querySelector("[data-navbar]");
|
|
const navTogglers = document.querySelectorAll("[data-nav-toggler]");
|
|
const overlay = document.querySelector("[data-overlay]");
|
|
|
|
const toggleNavbar = function () {
|
|
navbar.classList.toggle("active");
|
|
overlay.classList.toggle("active");
|
|
document.body.classList.toggle("active");
|
|
}
|
|
|
|
addEventOnElem(navTogglers, "click", toggleNavbar);
|
|
|
|
|
|
|
|
/**
|
|
* active header when window scroll down to 100px
|
|
*/
|
|
|
|
const header = document.querySelector("[data-header]");
|
|
|
|
const activeElemOnScroll = function () {
|
|
if (window.scrollY > 100) {
|
|
header.classList.add("active");
|
|
} else {
|
|
header.classList.remove("active");
|
|
}
|
|
}
|
|
|
|
addEventOnElem(window, "scroll", activeElemOnScroll);
|
|
|
|
// Function to update the active count
|
|
function updateActiveCount() {
|
|
// Get the current active count element
|
|
var activeCountElement = document.getElementById('active-count');
|
|
|
|
// Get the current active count
|
|
var currentCount = parseInt(activeCountElement.textContent);
|
|
|
|
// Generate a random change within the specified range
|
|
var changeAmount;
|
|
|
|
var currentHour = new Date().getHours();
|
|
|
|
// Adjust the change amount and update interval based on the time of the day
|
|
if (currentHour >= 7 && currentHour <= 22) {
|
|
// Daytime change amount range: 1-10
|
|
changeAmount = Math.floor(Math.random() * 10) + 1;
|
|
var updateInterval = 5000; // 5 seconds
|
|
} else {
|
|
// Nighttime change amount range: 1-5
|
|
changeAmount = Math.floor(Math.random() * 5) + 1;
|
|
var updateInterval = 120000; // 2 minutes
|
|
}
|
|
|
|
// Generate a random direction for the change (positive or negative)
|
|
var direction = Math.random() < 0.5 ? -1 : 1;
|
|
|
|
// Calculate the new count within the appropriate range
|
|
var newCount;
|
|
if (currentHour >= 7 && currentHour <= 22) {
|
|
// Daytime active count range: 90-500
|
|
newCount = Math.min(Math.max(currentCount + direction * changeAmount, 90), 500);
|
|
} else {
|
|
// Nighttime active count range: 20-50
|
|
newCount = Math.min(Math.max(currentCount + direction * changeAmount, 20), 50);
|
|
}
|
|
|
|
// Determine the color based on the direction of the change
|
|
var textColor = direction === 1 ? '#00ff00' : '#ff0000'; // Green for increase, red for decrease
|
|
|
|
// Update the text color
|
|
activeCountElement.style.color = textColor;
|
|
|
|
// Update the text content of the active count element
|
|
activeCountElement.textContent = newCount;
|
|
|
|
// After a short delay, revert the color back to default
|
|
setTimeout(function() {
|
|
activeCountElement.style.color = ''; // Revert to default color
|
|
}, 500); // Change color back after 0.5 second (matching the transition duration)
|
|
|
|
// Update the active count again after the specified interval
|
|
setTimeout(updateActiveCount, updateInterval);
|
|
}
|
|
|
|
// Update the active count initially
|
|
updateActiveCount();
|
|
|
|
|