12fe395ac0
Statische Webseite zur Vorstellung der Anwendung mit: - Hauptseite mit Features, Workflow, Technologie und Download-Bereichen - Datenschutzerklärung (speziell für Desktop-App) - Impressum-Vorlage - Modernes Dark-Theme Design mit Gradient-Akzenten - Vollständig responsiv (Desktop, Tablet, Mobile) - Interaktive JavaScript-Features (Smooth Scrolling, Animationen) - 8 Feature-Cards mit Hauptfunktionalitäten - Drei-Panel PDF-Vergleich, Batch-Verarbeitung, Duplikatserkennung - Installation und Download-Bereich für alle Plattformen 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
276 lines
9.2 KiB
JavaScript
276 lines
9.2 KiB
JavaScript
// Smooth Scrolling für Navigation
|
|
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
|
anchor.addEventListener('click', function (e) {
|
|
e.preventDefault();
|
|
const target = document.querySelector(this.getAttribute('href'));
|
|
if (target) {
|
|
const navHeight = document.querySelector('.navbar').offsetHeight;
|
|
const targetPosition = target.getBoundingClientRect().top + window.pageYOffset - navHeight;
|
|
window.scrollTo({
|
|
top: targetPosition,
|
|
behavior: 'smooth'
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
// Intersection Observer für Fade-In Animationen
|
|
const observerOptions = {
|
|
threshold: 0.1,
|
|
rootMargin: '0px 0px -50px 0px'
|
|
};
|
|
|
|
const observer = new IntersectionObserver((entries) => {
|
|
entries.forEach(entry => {
|
|
if (entry.isIntersecting) {
|
|
entry.target.classList.add('visible');
|
|
}
|
|
});
|
|
}, observerOptions);
|
|
|
|
// Füge Fade-In Klassen zu Elementen hinzu
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
const animatedElements = document.querySelectorAll(
|
|
'.feature-card, .workflow-step, .tech-item, .benefit-item, .download-card'
|
|
);
|
|
|
|
animatedElements.forEach((el, index) => {
|
|
el.classList.add('fade-in');
|
|
el.style.transitionDelay = `${index * 0.1}s`;
|
|
observer.observe(el);
|
|
});
|
|
});
|
|
|
|
// Navbar Scroll-Effekt
|
|
let lastScroll = 0;
|
|
const navbar = document.querySelector('.navbar');
|
|
|
|
window.addEventListener('scroll', () => {
|
|
const currentScroll = window.pageYOffset;
|
|
|
|
if (currentScroll <= 0) {
|
|
navbar.style.boxShadow = 'none';
|
|
} else {
|
|
navbar.style.boxShadow = '0 2px 10px rgba(0, 0, 0, 0.3)';
|
|
}
|
|
|
|
lastScroll = currentScroll;
|
|
});
|
|
|
|
// Feature-Card Parallax-Effekt
|
|
document.querySelectorAll('.feature-card').forEach(card => {
|
|
card.addEventListener('mousemove', (e) => {
|
|
const rect = card.getBoundingClientRect();
|
|
const x = e.clientX - rect.left;
|
|
const y = e.clientY - rect.top;
|
|
|
|
const centerX = rect.width / 2;
|
|
const centerY = rect.height / 2;
|
|
|
|
const deltaX = (x - centerX) / centerX;
|
|
const deltaY = (y - centerY) / centerY;
|
|
|
|
card.style.transform = `perspective(1000px) rotateY(${deltaX * 5}deg) rotateX(${-deltaY * 5}deg) translateY(-5px)`;
|
|
});
|
|
|
|
card.addEventListener('mouseleave', () => {
|
|
card.style.transform = 'perspective(1000px) rotateY(0deg) rotateX(0deg) translateY(0)';
|
|
});
|
|
});
|
|
|
|
// Download-Button Analytics (Placeholder)
|
|
document.querySelectorAll('.btn-download').forEach(button => {
|
|
button.addEventListener('click', (e) => {
|
|
e.preventDefault();
|
|
const platform = e.target.closest('.download-card').querySelector('h3').textContent;
|
|
console.log(`Download initiated for: ${platform}`);
|
|
|
|
// Hier könnte eine echte Download-Logik oder Analytics-Tracking erfolgen
|
|
alert(`Download für ${platform} würde hier starten.\nBitte konfigurieren Sie die Download-Links in der index.html.`);
|
|
});
|
|
});
|
|
|
|
// Mobile Navigation Toggle (für zukünftige Erweiterung)
|
|
const createMobileMenu = () => {
|
|
const navMenu = document.querySelector('.nav-menu');
|
|
const navbar = document.querySelector('.navbar .container');
|
|
|
|
// Erstelle Hamburger-Button nur auf mobilen Geräten
|
|
if (window.innerWidth <= 768) {
|
|
const existingToggle = document.querySelector('.nav-toggle');
|
|
if (existingToggle) return;
|
|
|
|
const toggle = document.createElement('button');
|
|
toggle.className = 'nav-toggle';
|
|
toggle.innerHTML = '☰';
|
|
toggle.style.cssText = `
|
|
background: none;
|
|
border: none;
|
|
color: var(--text-primary);
|
|
font-size: 1.5rem;
|
|
cursor: pointer;
|
|
padding: 0.5rem;
|
|
`;
|
|
|
|
toggle.addEventListener('click', () => {
|
|
navMenu.style.display = navMenu.style.display === 'flex' ? 'none' : 'flex';
|
|
if (navMenu.style.display === 'flex') {
|
|
navMenu.style.cssText = `
|
|
display: flex;
|
|
flex-direction: column;
|
|
position: absolute;
|
|
top: 100%;
|
|
left: 0;
|
|
right: 0;
|
|
background: var(--surface);
|
|
padding: 1rem;
|
|
border-top: 1px solid var(--surface-light);
|
|
`;
|
|
}
|
|
});
|
|
|
|
navbar.appendChild(toggle);
|
|
}
|
|
};
|
|
|
|
// Responsive Handling
|
|
window.addEventListener('resize', createMobileMenu);
|
|
createMobileMenu();
|
|
|
|
// Particle Background Animation (optional, dezent)
|
|
const createParticles = () => {
|
|
const hero = document.querySelector('.hero');
|
|
const particlesContainer = document.createElement('div');
|
|
particlesContainer.className = 'particles';
|
|
particlesContainer.style.cssText = `
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
overflow: hidden;
|
|
pointer-events: none;
|
|
opacity: 0.3;
|
|
`;
|
|
|
|
for (let i = 0; i < 20; i++) {
|
|
const particle = document.createElement('div');
|
|
particle.style.cssText = `
|
|
position: absolute;
|
|
width: 4px;
|
|
height: 4px;
|
|
background: var(--primary-color);
|
|
border-radius: 50%;
|
|
left: ${Math.random() * 100}%;
|
|
top: ${Math.random() * 100}%;
|
|
animation: float-particle ${5 + Math.random() * 10}s infinite ease-in-out;
|
|
animation-delay: ${Math.random() * 5}s;
|
|
`;
|
|
particlesContainer.appendChild(particle);
|
|
}
|
|
|
|
// Füge Animation hinzu
|
|
if (!document.querySelector('#particle-animation')) {
|
|
const style = document.createElement('style');
|
|
style.id = 'particle-animation';
|
|
style.textContent = `
|
|
@keyframes float-particle {
|
|
0%, 100% {
|
|
transform: translate(0, 0);
|
|
}
|
|
25% {
|
|
transform: translate(20px, -20px);
|
|
}
|
|
50% {
|
|
transform: translate(-20px, -40px);
|
|
}
|
|
75% {
|
|
transform: translate(20px, -60px);
|
|
}
|
|
}
|
|
`;
|
|
document.head.appendChild(style);
|
|
}
|
|
|
|
hero.style.position = 'relative';
|
|
hero.insertBefore(particlesContainer, hero.firstChild);
|
|
};
|
|
|
|
// Initialisiere Partikel nur auf Desktop
|
|
if (window.innerWidth > 768) {
|
|
createParticles();
|
|
}
|
|
|
|
// Counter Animation für Benefits
|
|
const animateCounters = () => {
|
|
const counters = document.querySelectorAll('.benefit-number');
|
|
|
|
counters.forEach(counter => {
|
|
const target = counter.textContent;
|
|
|
|
// Prüfe ob es eine Zahl ist
|
|
if (!isNaN(parseInt(target))) {
|
|
const targetNum = parseInt(target);
|
|
const duration = 2000;
|
|
const increment = targetNum / (duration / 16);
|
|
let current = 0;
|
|
|
|
const updateCounter = () => {
|
|
current += increment;
|
|
if (current < targetNum) {
|
|
counter.textContent = Math.floor(current) + 'x';
|
|
requestAnimationFrame(updateCounter);
|
|
} else {
|
|
counter.textContent = target;
|
|
}
|
|
};
|
|
|
|
// Starte Animation wenn Element sichtbar wird
|
|
const counterObserver = new IntersectionObserver((entries) => {
|
|
entries.forEach(entry => {
|
|
if (entry.isIntersecting) {
|
|
updateCounter();
|
|
counterObserver.unobserve(entry.target);
|
|
}
|
|
});
|
|
});
|
|
|
|
counterObserver.observe(counter);
|
|
}
|
|
});
|
|
};
|
|
|
|
animateCounters();
|
|
|
|
// Easter Egg: Konami Code
|
|
let konamiCode = [];
|
|
const konamiSequence = ['ArrowUp', 'ArrowUp', 'ArrowDown', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowLeft', 'ArrowRight', 'b', 'a'];
|
|
|
|
document.addEventListener('keydown', (e) => {
|
|
konamiCode.push(e.key);
|
|
konamiCode = konamiCode.slice(-10);
|
|
|
|
if (konamiCode.join(',') === konamiSequence.join(',')) {
|
|
document.body.style.animation = 'rainbow 2s infinite';
|
|
|
|
if (!document.querySelector('#rainbow-animation')) {
|
|
const style = document.createElement('style');
|
|
style.id = 'rainbow-animation';
|
|
style.textContent = `
|
|
@keyframes rainbow {
|
|
0% { filter: hue-rotate(0deg); }
|
|
100% { filter: hue-rotate(360deg); }
|
|
}
|
|
`;
|
|
document.head.appendChild(style);
|
|
}
|
|
|
|
setTimeout(() => {
|
|
document.body.style.animation = '';
|
|
}, 5000);
|
|
}
|
|
});
|
|
|
|
console.log('%c🚀 DocuMentor', 'font-size: 24px; font-weight: bold; background: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 100%); -webkit-background-clip: text; color: transparent;');
|
|
console.log('%cProfessionelle XSL-Transformations-Verwaltung', 'font-size: 14px; color: #94a3b8;');
|