34 Terrassement
✆ : 06 26 35 35 48
34 terrassement | Création de jardins | Paysagiste | Créations de bassins
Plan du site
Plan du site
Plan du site

Plan du site


Veuillez trouver le plan du site de la SAS CONCEPTION PAYSAGE

 

SAS CONCEPTION PAYSAGE
34390 MONS

M. Kevin Marcade

☎  : 06 26 35 35 48

 

 

Sitemap


Nombre de pages : 11

 

Autres sites

Formation de Professeur de Yoga dans l'Hérault - Stages de Yoga dans l'Hérault - Haimavati Ashram Sadhana Peeth

Stages de Yoga dans l'Hérault

Yoga Live : Cours de Yoga en live et Etude de textes en live

Formation professeur Yoga

i7informatique Informatique, Sites internet, Téléphonie Sainte-MAxime

Forum sur la recherche spirituelle et le Yoga

Maisons Innovantes Écoénergétiques : LES MAISONS DE CAMILLE

Retraite de Yoga dans l'Hérault

Hôtel Kasbah Riad Amnir à Mahmid une nouvelle vision du luxe dans le désert Marocain

Hôtel Riad à Mahmid, hôtel de luxe dans le désert Marocain

Massage, Sophrologie, Natation, Hypnose à Villeneuve-Loubet : Corinne HOLISTIC

Entretien de piscines à Sainte-Maxime, Grimaud, Port Grimaud, les Issambres, le Plan de la Tour.

Lucie Yoga : Cours de Yoga Marseille 9ème et Cours de Yoga à La Penne sur Huveaune

Isabel Massage à Saint-Laurent-du-Var et à domicile dans les Alpes-Maritimes 06

Jade Haeckler Sainte-Maxime : Accompagnatrice en connaissance de Soi Conseillère agréée Fleurs de Bach - Connexion à l'âme Sophrologue - Praticienne en Hypnose Humaniste

Voyage Désert Maroc Agence de Voyage écotouristique familiale et locale.

La Cabane de Pascale : Objets de décoration mais aussi des créations artisanales.

Marine Technique Méditerranée, le spécialiste des composites dans le Golfe de Saint-Tropez

AZURBOX Grimaud Location de box, espaces pour rangement

Transfert aéroport gare Saint-Tropez, Taxi Sainte-Maxime, Taxi grimaud, Taxi Port-Grimaud

Robert Faure peintre sumi-e. Cours en ligne peinture encre de chine sumi-e

Shiatsu et massage à Monaco et Cap d'ail : Jonathan Oeslick

Randonnées, Excursions, Voyages sur mesure dans le désert Marocain avec Caravane Renard du Désert

Esprit Grimpe Eyguières

Pascale Rome Ostéopathe Sainte-Maxime, grimaud, Porte Grimaud, Le plan de la tour

Yachting Concept : Location de yachts PACA

Shakti hatha Yoga Maussane les Alpilles

/* ========================================================= 34 TERRASSEMENT - JavaScript principal Menu mobile + slider + reveal au scroll + retour en haut + cookies ========================================================= */ (function() { 'use strict'; /* ========================================================= 1. MENU MOBILE - Hamburger animé ========================================================= */ function initMobileMenu() { const mobileMenu = document.getElementById('mobile-menu'); const navList = document.querySelector('.nav-list'); if (!mobileMenu || !navList) return; mobileMenu.addEventListener('click', function() { navList.classList.toggle('active'); mobileMenu.classList.toggle('active'); const expanded = navList.classList.contains('active'); mobileMenu.setAttribute('aria-expanded', expanded); }); // Fermer le menu au clic sur un lien navList.querySelectorAll('a').forEach(function(link) { link.addEventListener('click', function() { navList.classList.remove('active'); mobileMenu.classList.remove('active'); }); }); } /* ========================================================= 2. SLIDER (avec autoplay, dots, swipe tactile) ========================================================= */ function initSlider() { const slider = document.getElementById('slider1'); if (!slider) return; const slides = Array.from(slider.querySelectorAll('li')); if (slides.length === 0) return; const sliderWrapper = slider.closest('.slider1'); const prevBtn = sliderWrapper.querySelector('.slider-arrow.prev'); const nextBtn = sliderWrapper.querySelector('.slider-arrow.next'); const dotsContainer = sliderWrapper.querySelector('.slider-dots'); let current = 0; let interval = null; const delay = 5000; let touchStartX = 0; function showSlide(index) { slides.forEach(function(slide, i) { slide.classList.toggle('active', i === index); }); current = index; updateDots(); } function goToSlide(index) { if (index < 0) index = slides.length - 1; if (index >= slides.length) index = 0; showSlide(index); } function nextSlide() { goToSlide(current + 1); } function prevSlide() { goToSlide(current - 1); } function startAutoplay() { if (slides.length < 2) return; stopAutoplay(); interval = setInterval(nextSlide, delay); } function stopAutoplay() { if (interval) { clearInterval(interval); interval = null; } } function createDots() { if (!dotsContainer) return; dotsContainer.innerHTML = ''; slides.forEach(function(_, index) { const dot = document.createElement('button'); dot.type = 'button'; dot.className = 'slider-dot' + (index === 0 ? ' active' : ''); dot.setAttribute('aria-label', 'Aller à la slide ' + (index + 1)); dot.addEventListener('click', function() { goToSlide(index); startAutoplay(); }); dotsContainer.appendChild(dot); }); } function updateDots() { if (!dotsContainer) return; dotsContainer.querySelectorAll('.slider-dot').forEach(function(dot, i) { dot.classList.toggle('active', i === current); }); } // Une seule slide : tout cacher if (slides.length < 2) { if (prevBtn) prevBtn.style.display = 'none'; if (nextBtn) nextBtn.style.display = 'none'; if (dotsContainer) dotsContainer.style.display = 'none'; showSlide(0); return; } createDots(); showSlide(0); if (prevBtn) prevBtn.addEventListener('click', function() { prevSlide(); startAutoplay(); }); if (nextBtn) nextBtn.addEventListener('click', function() { nextSlide(); startAutoplay(); }); sliderWrapper.addEventListener('mouseenter', stopAutoplay); sliderWrapper.addEventListener('mouseleave', startAutoplay); // Swipe tactile sliderWrapper.addEventListener('touchstart', function(e) { touchStartX = e.changedTouches[0].clientX; }, { passive: true }); sliderWrapper.addEventListener('touchend', function(e) { const delta = e.changedTouches[0].clientX - touchStartX; if (Math.abs(delta) > 50) { delta < 0 ? nextSlide() : prevSlide(); } }, { passive: true }); // Pause si onglet inactif (économise CPU) document.addEventListener('visibilitychange', function() { document.hidden ? stopAutoplay() : startAutoplay(); }); startAutoplay(); } /* ========================================================= 3. RETOUR EN HAUT ========================================================= */ function initScrollToTop() { const btn = document.getElementById('scrollToTopBtn'); if (!btn) return; window.addEventListener('scroll', function() { const scrollTop = document.body.scrollTop || document.documentElement.scrollTop; btn.classList.toggle('show', scrollTop > 150); }, { passive: true }); btn.addEventListener('click', function() { window.scrollTo({ top: 0, behavior: 'smooth' }); }); } /* ========================================================= 4. ANIMATIONS REVEAL AU SCROLL ========================================================= */ function initReveal() { if (!('IntersectionObserver' in window)) return; const observer = new IntersectionObserver(function(entries, obs) { entries.forEach(function(entry) { if (entry.isIntersecting) { entry.target.classList.add('visible'); obs.unobserve(entry.target); } }); }, { root: null, rootMargin: '0px', threshold: 0.1 }); // Ajout auto de la classe "reveal" sur h1/h2 document.querySelectorAll('h1, h2').forEach(function(el) { el.classList.add('reveal'); observer.observe(el); }); // Observation des reveal-* personnalisés document.querySelectorAll('.reveal-left, .reveal-right, .reveal-up, .reveal-down').forEach(function(el) { observer.observe(el); }); } /* ========================================================= 5. COOKIE BANNER (RGPD - localStorage) ========================================================= */ function initCookieBanner() { try { if (localStorage.getItem('cookieConsent')) return; } catch (e) { return; // localStorage indisponible (mode privé) } const banner = document.createElement('div'); banner.id = 'cookie-banner'; banner.setAttribute('role', 'dialog'); banner.setAttribute('aria-label', 'Consentement aux cookies'); banner.innerHTML = '

Ce site utilise des cookies pour vous offrir la meilleure expérience. ' + 'En savoir plus.

' + '
' + '' + '' + '
'; document.body.appendChild(banner); document.getElementById('accept-cookies').addEventListener('click', function() { try { localStorage.setItem('cookieConsent', 'accepted'); } catch (e) {} banner.remove(); }); document.getElementById('reject-cookies').addEventListener('click', function() { try { localStorage.setItem('cookieConsent', 'rejected'); } catch (e) {} banner.remove(); }); } /* ========================================================= 6. INITIALISATION ========================================================= */ function init() { initMobileMenu(); initSlider(); initScrollToTop(); initReveal(); initCookieBanner(); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })();