lolakd's picture
Сайт сервера по майнкрафту Exemine. Особености сервера просто выживание без креатива.
786b127 verified
// Exemine Minecraft Server Website JavaScript
document.addEventListener('DOMContentLoaded', function() {
// Initialize feather icons
if (typeof feather !== 'undefined') {
feather.replace();
}
// Server status check
const serverStatus = {
checkStatus: async function() {
try {
// Simulate server status check (replace with actual API call)
const response = await fetch('/api/server-status');
const data = await response.json();
this.updateStatus(data);
} catch (error) {
console.log('Server status check failed, using demo data');
// Demo data for demonstration
this.updateStatus({
online: true,
players: 24,
maxPlayers: 32,
version: '1.20.1'
});
}
},
updateStatus: function(data) {
const statusElement = document.querySelector('.text-green-400');
const playersElement = document.querySelector('.text-2xl.font-bold.text-primary-500');
const versionElement = document.querySelector('.text-lg');
if (statusElement) {
statusElement.textContent = data.online ? 'Онлайн' : 'Офлайн';
}
if (playersElement) {
playersElement.textContent = `${data.players}/${data.maxPlayers}`;
}
if (versionElement) {
versionElement.textContent = data.version;
}
}
};
// Copy server IP functionality
const copyButton = document.querySelector('button');
if (copyButton && copyButton.textContent.includes('Скопировать')) {
copyButton.addEventListener('click', function() {
const serverIP = 'exemine.mc-server.ru';
navigator.clipboard.writeText(serverIP).then(() => {
const originalText = this.textContent;
this.textContent = 'Скопировано!';
this.classList.add('bg-green-600');
this.classList.remove('bg-primary-600', 'hover:bg-primary-700');
setTimeout(() => {
this.textContent = originalText;
this.classList.remove('bg-green-600');
this.classList.add('bg-primary-600', 'hover:bg-primary-700');
}, 2000);
}).catch(() => {
// Fallback for older browsers
const textArea = document.createElement('textarea');
textArea.value = serverIP;
document.body.appendChild(textArea);
textArea.select();
document.execCommand('copy');
document.body.removeChild(textArea);
const originalText = this.textContent;
this.textContent = 'Скопировано!';
this.classList.add('bg-green-600');
this.classList.remove('bg-primary-600', 'hover:bg-primary-700');
setTimeout(() => {
this.textContent = originalText;
this.classList.remove('bg-green-600');
this.classList.add('bg-primary-600', 'hover:bg-primary-700');
}, 2000);
});
});
}
// Smooth scroll for navigation links
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
if (target) {
target.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
});
});
// Navbar background on scroll
window.addEventListener('scroll', function() {
const navbar = document.querySelector('nav');
if (window.scrollY > 100) {
navbar.classList.add('bg-gray-800', 'bg-opacity-95');
navbar.classList.remove('bg-gray-800');
} else {
navbar.classList.remove('bg-opacity-95');
navbar.classList.add('bg-gray-800');
}
});
// Animate elements on scroll
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
};
const observer = new IntersectionObserver(function(entries) {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('animate-fade-in');
}
});
}, observerOptions);
// Observe elements for animation
document.querySelectorAll('.bg-gray-800, .bg-gray-900').forEach(el => {
el.classList.add('opacity-0', 'transform', 'translate-y-4', 'transition', 'duration-700');
observer.observe(el);
});
// Add CSS for fade-in animation
const style = document.createElement('style');
style.textContent = `
.animate-fade-in {
opacity: 1 !important;
transform: translateY(0) !important;
}
`;
document.head.appendChild(style);
// Player counter animation
function animateCounter(element, target) {
let current = 0;
const increment = target / 50;
const timer = setInterval(() => {
current += increment;
if (current >= target) {
current = target;
clearInterval(timer);
}
element.textContent = Math.floor(current) + '/32';
}, 30);
}
// Handle main action buttons
document.querySelectorAll('button').forEach(button => {
button.addEventListener('click', function(e) {
// Add click effect
const ripple = document.createElement('span');
ripple.classList.add('absolute', 'bg-white', 'opacity-25', 'rounded-full', 'animate-ping');
const rect = this.getBoundingClientRect();
const size = Math.max(rect.width, rect.height);
ripple.style.width = size + 'px';
ripple.style.height = size + 'px';
ripple.style.left = (e.clientX - rect.left - size / 2) + 'px';
ripple.style.top = (e.clientY - rect.top - size / 2) + 'px';
this.style.position = 'relative';
this.style.overflow = 'hidden';
this.appendChild(ripple);
setTimeout(() => {
ripple.remove();
}, 600);
});
});
// Initialize server status check
serverStatus.checkStatus();
// Add typing effect to hero text
const heroTitle = document.querySelector('h1');
if (heroTitle && heroTitle.textContent.includes('Exemine')) {
const originalText = heroTitle.textContent;
heroTitle.textContent = '';
let i = 0;
const typeWriter = () => {
if (i < originalText.length) {
heroTitle.textContent += originalText.charAt(i);
i++;
setTimeout(typeWriter, 100);
}
};
setTimeout(typeWriter, 500);
}
// Add hover effects to feature cards
document.querySelectorAll('.bg-gray-800').forEach(card => {
if (card.querySelector('h3')) {
card.classList.add('card-hover', 'cursor-pointer');
card.addEventListener('mouseenter', function() {
this.style.transform = 'translateY(-5px)';
this.style.boxShadow = '0 20px 40px rgba(0, 0, 0, 0.3)';
});
card.addEventListener('mouseleave', function() {
this.style.transform = 'translateY(0)';
this.style.boxShadow = 'none';
});
}
});
// Add mobile menu toggle (if needed)
const mobileMenuButton = document.querySelector('.md\\:hidden button');
const mobileMenu = document.querySelector('.md\\:block');
if (mobileMenuButton && mobileMenu) {
mobileMenuButton.addEventListener('click', function() {
mobileMenu.classList.toggle('hidden');
});
}
// Performance monitoring
console.log('Exemine website loaded successfully');
console.log('Features loaded:', document.querySelectorAll('.bg-gray-800').length);
});
// Service Worker registration for PWA capabilities (optional)
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
navigator.serviceWorker.register('/sw.js')
.then(function(registration) {
console.log('ServiceWorker registration successful');
}, function(err) {
console.log('ServiceWorker registration failed');
});
});
}