[data-pulse]
`) || []; if (pulseTargets.length === 0) return; // Puls-Styles hinzufügen addPulseStyles(); pulseTargets.forEach(button => { // Mousedown – Puls starten button.addEventListener(‚mousedown‘, function(e) { this.classList.add(‚is-pulsing‘); createRipple(this, e); }); // Mouseup – Puls beenden button.addEventListener(‚mouseup‘, function() { setTimeout(() => { this.classList.remove(‚is-pulsing‘); }, CONFIG.pulse.duration); }); // Mouseleave – Puls beenden (falls Maus das Element verlässt) button.addEventListener(‚mouseleave‘, function() { this.classList.remove(‚is-pulsing‘); }); // Touch-Events button.addEventListener(‚touchstart‘, function(e) { this.classList.add(‚is-pulsing‘); }, { passive: true }); button.addEventListener(‚touchend‘, function() { setTimeout(() => { this.classList.remove(‚is-pulsing‘); }, CONFIG.pulse.duration); }, { passive: true }); }); console.log(`✅ Puls-Effekte für ${pulseTargets.length} Buttons aktiviert`); } /** * Ripple-Effekt bei Klick erstellen */ function createRipple(element, event) { const ripple = document.createElement(’span‘); ripple.className = ‚kg-ripple‘; const rect = element.getBoundingClientRect(); const size = Math.max(rect.width, rect.height); const x = event.clientX – rect.left – size / 2; const y = event.clientY – rect.top – size / 2; ripple.style.cssText = ` position: absolute; width: ${size}px; height: ${size}px; left: ${x}px; top: ${y}px; background: radial-gradient(circle, rgba(255,255,255,0.5) 0%, transparent 70%); border-radius: 50%; transform: scale(0); animation: rippleEffect 0.6s ease-out forwards; pointer-events: none; `; element.style.position = ‚relative‘; element.style.overflow = ‚hidden‘; element.appendChild(ripple); setTimeout(() => ripple.remove(), 600); } /** * Puls-Styles hinzufügen */ function addPulseStyles() { if (document.getElementById(‚movement-pulse-styles‘)) return; const style = document.createElement(’style‘); style.id = ‚movement-pulse-styles‘; style.textContent = ` /* Puls-Animation */ .is-pulsing { animation: buttonPulse 0.3s ease-out; } @keyframes buttonPulse { 0% { transform: scale(1); box-shadow: 0 0 0 0 rgba(233, 30, 99, 0.7); } 50% { transform: scale(${CONFIG.pulse.scale}); box-shadow: 0 0 20px 10px rgba(233, 30, 99, 0.3); } 100% { transform: scale(1); box-shadow: 0 0 0 0 rgba(233, 30, 99, 0); } } /* Ripple-Animation */ @keyframes rippleEffect { to { transform: scale(4); opacity: 0; } } /* Herzschlag-Puls für besondere Elemente */ .kg-heartbeat { animation: heartbeat 1.5s ease-in-out infinite; } @keyframes heartbeat { 0%, 100% { transform: scale(1); } 14% { transform: scale(1.1); } 28% { transform: scale(1); } 42% { transform: scale(1.1); } } /* Energie-Puls */ .kg-energy-pulse { animation: energyPulse 2s ease-in-out infinite; } @keyframes energyPulse { 0%, 100% { box-shadow: 0 0 5px rgba(255, 152, 0, 0.5); } 50% { box-shadow: 0 0 30px rgba(255, 152, 0, 0.8), 0 0 60px rgba(255, 152, 0, 0.4); } } `; document.head.appendChild(style); } // ============================================ // INTERAKTIVE BEWEGUNGS-ELEMENTE // ============================================ /** * Bewegungs-Tracker initialisieren */ function initMovementTracker() { const tracker = STATE.wrapper?.querySelector(‚.movement-tracker, .fitness-counter‘); if (!tracker) return; let stepCount = 0; const displayElement = tracker.querySelector(‚.step-count, .counter-value‘); const progressBar = tracker.querySelector(‚.progress-bar, .tracker-progress‘); // Klick erhöht Schritte tracker.addEventListener(‚click‘, () => { stepCount += Math.floor(randomRange(50, 150)); if (displayElement) { animateNumber(displayElement, stepCount); } if (progressBar) { const progress = Math.min((stepCount / 10000) * 100, 100); progressBar.style.width = `${progress}%`; } // Motivations-Nachricht bei Meilensteinen if (stepCount > 0 && stepCount % 1000 < 150) { showMotivation(); } // Partikel-Burst bei Klick createParticleBurst(tracker); }); } /** * Zahl animieren */ function animateNumber(element, targetValue) { if (prefersReducedMotion()) { element.textContent = targetValue.toLocaleString(); return; } const startValue = parseInt(element.textContent.replace(/\D/g, “)) || 0; const duration = 500; const startTime = performance.now(); function update(currentTime) { const elapsed = currentTime – startTime; const progress = Math.min(elapsed / duration, 1); const eased = easeOutQuad(progress); const current = Math.floor(startValue + (targetValue – startValue) * eased); element.textContent = current.toLocaleString(); if (progress < 1) { requestAnimationFrame(update); } } requestAnimationFrame(update); } /** * Partikel-Burst bei Aktion */ function createParticleBurst(element) { if (prefersReducedMotion()) return; const rect = element.getBoundingClientRect(); const centerX = rect.left + rect.width / 2; const centerY = rect.top + rect.height / 2; for (let i = 0; i < 8; i++) { const particle = document.createElement(‚div‘); particle.className = ‚kg-burst-particle‘; particle.textContent = randomFrom([‚⚡‘, ‚💪‘, ‚🔥‘, ‚✨‘]); const angle = (i / 8) * Math.PI * 2; const distance = randomRange(50, 100); const endX = centerX + Math.cos(angle) * distance; const endY = centerY + Math.sin(angle) * distance; particle.style.cssText = ` position: fixed; left: ${centerX}px; top: ${centerY}px; font-size: 20px; pointer-events: none; z-index: 9999; animation: burstParticle 0.8s ease-out forwards; –end-x: ${endX}px; –end-y: ${endY}px; `; document.body.appendChild(particle); setTimeout(() => particle.remove(), 800); } } /** * Motivations-Nachricht anzeigen */ function showMotivation() { const message = randomFrom(CONFIG.motivationMessages); const toast = document.createElement(‚div‘); toast.className = ‚kg-motivation-toast‘; toast.textContent = message; toast.style.cssText = ` position: fixed; top: 20%; left: 50%; transform: translateX(-50%) translateY(-20px); background: linear-gradient(135deg, #e91e63, #f06292); color: white; padding: 15px 30px; border-radius: 50px; font-size: 1.1rem; font-weight: bold; box-shadow: 0 10px 30px rgba(233, 30, 99, 0.4); z-index: 10000; opacity: 0; animation: motivationToast 3s ease-out forwards; `; document.body.appendChild(toast); setTimeout(() => toast.remove(), 3000); } /** * Zusätzliche Animations-Styles */ function addExtraStyles() { if (document.getElementById(‚movement-extra-styles‘)) return; const style = document.createElement(’style‘); style.id = ‚movement-extra-styles‘; style.textContent = ` /* Burst-Partikel */ @keyframes burstParticle { 0% { transform: translate(0, 0) scale(0); opacity: 1; } 100% { transform: translate( calc(var(–end-x) – 50%), calc(var(–end-y) – 50%) ) scale(1); opacity: 0; } } /* Motivations-Toast */ @keyframes motivationToast { 0% { opacity: 0; transform: translateX(-50%) translateY(-20px) scale(0.8); } 15% { opacity: 1; transform: translateX(-50%) translateY(0) scale(1.05); } 25% { transform: translateX(-50%) translateY(0) scale(1); } 85% { opacity: 1; transform: translateX(-50%) translateY(0); } 100% { opacity: 0; transform: translateX(-50%) translateY(-30px); } } /* Reveal-Animationen */ .kg-reveal { opacity: 0; transform: translateY(30px); transition: opacity 0.8s ease, transform 0.8s ease; } .kg-reveal.kg-active, .kg-reveal.revealed { opacity: 1; transform: translateY(0); } /* Verschiedene Reveal-Richtungen */ .kg-reveal-left { transform: translateX(-50px); } .kg-reveal-right { transform: translateX(50px); } .kg-reveal-scale { transform: scale(0.8); } .kg-reveal-left.kg-active, .kg-reveal-right.kg-active { transform: translateX(0); } .kg-reveal-scale.kg-active { transform: scale(1); } /* Speed-Trail */ .kg-trail-3d { transform-style: preserve-3d; perspective: 1000px; transition: transform 0.1s ease-out; } /* Energie-Aura */ .kg-energy-aura { position: relative; } .kg-energy-aura::before { content: “; position: absolute; top: -10px; left: -10px; right: -10px; bottom: -10px; background: linear-gradient(45deg, rgba(233, 30, 99, 0.3), rgba(255, 152, 0, 0.3), rgba(233, 30, 99, 0.3) ); border-radius: inherit; filter: blur(15px); animation: auraGlow 3s ease-in-out infinite; z-index: -1; } @keyframes auraGlow { 0%, 100% { opacity: 0.5; transform: scale(1); } 50% { opacity: 0.8; transform: scale(1.1); } } `; document.head.appendChild(style); } // ============================================ // SCROLL-BASIERTE ANIMATIONEN // ============================================ /** * Progress-Indikator für Seiten-Scroll */ function initScrollProgress() { const progressBar = document.querySelector(‚.scroll-progress, .reading-progress‘); if (!progressBar) return; const updateProgress = throttle(() => { const scrollHeight = document.documentElement.scrollHeight – window.innerHeight; const scrolled = (window.scrollY / scrollHeight) * 100; progressBar.style.width = `${scrolled}%`; }, CONFIG.performance.throttleMs); window.addEventListener(’scroll‘, updateProgress, { passive: true }); } /** * Aktivitäts-Level basierend auf Scroll */ function initActivityLevel() { const activityMeter = STATE.wrapper?.querySelector(‚.activity-meter, .energy-level‘); if (!activityMeter) return; let scrollVelocity = 0; let lastScrollTop = window.pageYOffset; let lastTime = Date.now(); const updateActivity = throttle(() => { const currentScrollTop = window.pageYOffset; const currentTime = Date.now(); const timeDiff = currentTime – lastTime; if (timeDiff > 0) { const distance = Math.abs(currentScrollTop – lastScrollTop); scrollVelocity = distance / timeDiff * 100; } // Aktivitäts-Level (0-100) const activityLevel = clamp(scrollVelocity * 2, 0, 100); activityMeter.style.setProperty(‚–activity-level‘, `${activityLevel}%`); // Klasse basierend auf Level activityMeter.classList.remove(‚low‘, ‚medium‘, ‚high‘); if (activityLevel < 30) { activityMeter.classList.add(‚low‘); } else if (activityLevel < 70) { activityMeter.classList.add(‚medium‘); } else { activityMeter.classList.add(‚high‘); } lastScrollTop = currentScrollTop; lastTime = currentTime; }, 50); window.addEventListener(’scroll‘, updateActivity, { passive: true }); } // ============================================ // CLEANUP & PERFORMANCE // ============================================ /** * Cleanup bei Verlassen */ function cleanup() { // Interval stoppen if (STATE.particleInterval) { clearInterval(STATE.particleInterval); } // Animation Frame canceln if (STATE.animationFrame) { cancelAnimationFrame(STATE.animationFrame); } // Partikel entfernen STATE.particles.forEach(particle => { if (particle.parentNode) { particle.remove(); } }); STATE.particles = []; console.log(‚🧹 Bewegungs-Effekte bereinigt‘); } // ============================================ // INITIALISIERUNG // ============================================ /** * Hauptinitialisierung */ function init() { // Wrapper finden STATE.wrapper = document.querySelector(‚.kneipp-movement-wrapper, .movement-page, [data-movement-effects]‘); if (!STATE.wrapper) { // Kein Movement-Wrapper gefunden – nur auf Movement-Seiten aktiv return; } console.log(‚🏃 Bewegungs-Effekte werden initialisiert…‘); const startTime = performance.now(); // Styles hinzufügen addParticleStyles(); addPulseStyles(); addExtraStyles(); // Effekte initialisieren initParticles(); initScrollReveal(); initParallaxTrail(); initAdvancedParallax(); initPulseEffects(); initMovementTracker(); initScrollProgress(); initActivityLevel(); // State aktualisieren STATE.initialized = true; const loadTime = (performance.now() – startTime).toFixed(2); console.log(`✅ Bewegungs-Effekte initialisiert in ${loadTime}ms`); } /** * DOM Ready Handler */ function ready(fn) { if (document.readyState !== ‚loading‘) { fn(); } else { document.addEventListener(‚DOMContentLoaded‘, fn); } } // Starten ready(init); // Cleanup bei Page Unload window.addEventListener(‚beforeunload‘, cleanup); // ============================================ // GLOBALE API // ============================================ window.KneippMovement = { config: CONFIG, state: STATE, particleTypes: PARTICLE_TYPES, // Methoden init, cleanup, // Partikel createParticle: () => { const container = document.getElementById(‚kg-particles-container‘); if (container) createParticle(container); }, createBurst: createParticleBurst, // Motivation showMotivation, // Utils prefersReducedMotion, randomFrom, randomRange }; })();
Kneipp Petershagen: Finde Deine natürliche Balance & Vitalität
Finde Deine Kraft
Ich weiß, dass Sie im Alltag nach mehr Energie suchen. Die Antworten liegen in der Kraft der Natur. Entdecken Sie meine Lehre für ein vitales Leben.
Jetzt Mitglied werden
Unser Kneipp-Zentrum
Mir ist wichtig, dass Sie wissen, wo Sie Halt und Gemeinschaft finden. Unser Zentrum an der Nachtigallenstraße 9 ist mehr als nur ein Kursort. Es ist ein Ort der Begegnung, des Lernens und der aktiven Vorsorge – direkt vor Ihrer Tür. Hier finden Sie Hydrotherapie, Bewegungssäle und eine starke Gemeinschaft.
Das erwartet Sie bei uns:
- Persönliche Begleitung: Kompetente Kursleitende, die meine Lehre modern und lebensnah vermitteln.
- Gelebte Praxis: Eigene Räumlichkeiten für Hydrotherapie und Bewegungskurse.
- Starke Gemeinschaft: Neue Kontakte und gegenseitige Motivation.
Wussten Sie schon?
Die Fünf Unverrückbaren Säulen: Ihr ganzheitliches Fundament
Ich habe gesehen, dass diese fünf Elemente zusammenwirken, um den gesamten Organismus zu stärken. Ich zeige Ihnen, wie sie ineinandergreifen:
1. Das Wasser
Der stärkste Helfer: Beginnen Sie den Tag mit einem erfrischenden Guss, um Ihren Kreislauf zu wecken und die Abwehr zu stärken.
Mehr über Hydrotherapie2. Die Pflanzen
Die Apotheke der Natur: Nutzen Sie die Heilkraft heimischer Kräuter zur sanften Unterstützung Ihres Wohlbefindens.
Heilpflanzen-Wissen3. Die Bewegung
Der Motor des Körpers: Finden Sie Freude an natürlicher Aktivität. Gehen, Wandern, Atmen – das ist Leben.
Kursplan Bewegung4. Die Ernährung
Die einfache Kost: Setzen Sie auf naturbelassene, vollwertige Lebensmittel für eine starke Mitte und anhaltende Energie.
Rezepte entdecken5. Die Lebensordnung
Die innere Balance: Schaffen Sie bewusste Ruhepausen. Harmonie für Körper, Geist und Seele ist die beste Burnout-Prävention.
Entspannungs-TippsMein Fokus: Die Bewegung – Stress ade durch natürliche Aktivität
Ich sehe Bewegung als die einfachste und freudvollste Art, sich um sich selbst zu kümmern. Mir ist wichtig, Ihnen zu zeigen: Es braucht kein Leistungssport zu sein.
“Mäßige Bewegung, wenn sie im Freien geschieht, ist die beste Kur.” — Sebastian Kneipp
Ich habe gelernt, dass eine bewusste Wanderung oder ein einfacher Spaziergang an der frischen Luft den Geist klärt, den Stoffwechsel anregt und das Herz stärkt.
Dein persönlicher Stress-Abbau-Weg
Ich zeige Ihnen, wie Sie mit gezielten Übungen Verspannungen lösen und neue Lebensenergie gewinnen. Gerade in stressigen Phasen ist die Bewegung an der frischen Luft der beste Ausgleich. Unser Nordic Walking oder die sanfte Wirbelsäulengymnastik ist dafür perfekt. Wir fangen ganz einfach an. Ich ermutige dich: Starte heute mit 15 Minuten bewusstem Gehen.
Kurzer, motivierender Clip: Eine Gruppe beim Nordic Walking im Wald bei Petershagen – spüre die Energie der Natur!
Für wen ich da bin: Finden Sie Ihr perfektes Kneipp-Programm
Ich passe meine Ratschläge individuell an Ihre Lebenssituation an. Wählen Sie, welche meiner Zielgruppen Sie am besten beschreibt, um direkt die relevanten Kurse und Artikel zu sehen.
Junge Familien 🧒
Fokus: Erkältungsprävention, Kinderbäder und schnelle, gesunde Familienrezepte. Ihr Tonfall: positiv und ermutigend.
Gesundheitsbewusste 50+ 👵
Fokus: Kreislaufpflege, Entspannungstechniken und Kräuterwissen für mehr Stabilität. Ihr Tonfall: warm und respektvoll.
Therapeut:innen & Kursleitende 🧘
Fokus: Fachwissen, didaktische Aufbereitung und Unterstützung für professionelle Anwendungen. Ihr Tonfall: strukturiert und kompetent.
Ihr nächster Schritt: Das aktuelle Kursprogramm
Ich freue mich darauf, Sie kennenzulernen. Hier finden Sie unser aktuelles Programm mit allen Terminen, Anmeldeinformationen und Kursbeschreibungen.
Jetzt das aktuelle Programm 202X/202Y ansehen & anmeldenMein dringender Hinweis: Meine Ratschläge zur ganzheitlichen Lebensweise und die hier vorgeschlagenen Inhalte ersetzen keine professionelle medizinische Beratung, Diagnose oder Behandlung durch einen Arzt oder Spezialisten.