DERNIÈRE CHANCE -20%
DERNIÈRE CHANCE -20%
En profiter
Webflow

Créer une exit popup

Javascript
HTML
CSS
Auteur
Aurélien Gallier
Démo lecture seule
Voir
Remix Link
Voir
Démo live
Voir

Copie-colle ce script dans le <body> de ta page

Ce script va te permettre de gérer l'affichage de la popin si l'utilisateur sors de la page. La popin a un délai de réapparition par défaut de 1 min que tu peux modifier à tout moment (voir explication sous le code).


<script>
// Exit Popup Script pour Webflow
// À placer dans les Custom Code Settings de Webflow (avant </body>)

(function() {
    'use strict';
    
    // Configuration
    const config = {
        sensitivity: 20,        // Sensibilité de détection (pixels)
        delay: 1000,           // Délai minimum avant déclenchement (ms)
        cookieExpiry: 1,      // Durée du cookie en minutes
        showOnMobile: false    // Afficher sur mobile
    };
    
    let popupShown = false;
    let mouseLeaveTimer = null;
    let isMouseTracking = false;
    let entryTime = Date.now();
    
    // Vérifier si l'utilisateur est sur mobile
    function isMobile() {
        return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) || 
               window.innerWidth <= 768;
    }
    
    // Gestion des cookies
    function setCookie(name, value, minutes) {
        const expires = new Date();
        expires.setTime(expires.getTime() + (minutes * 60 * 1000));
        document.cookie = `${name}=${value};expires=${expires.toUTCString()};path=/`;
    }
    
    function getCookie(name) {
        const nameEQ = name + "=";
        const ca = document.cookie.split(';');
        for(let i = 0; i < ca.length; i++) {
            let c = ca[i];
            while (c.charAt(0) === ' ') c = c.substring(1, c.length);
            if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);
        }
        return null;
    }
    
    // Afficher la popup
    function showPopup() {
        if (popupShown) return;
        
        const popup = document.querySelector('.popin_overlay');
        if (!popup) {
            console.warn('Exit Popup: Élément .popin_overlay introuvable');
            return;
        }
        
        popupShown = true;
        popup.style.display = 'flex';
        
        // Animation d'apparition
        setTimeout(() => {
            popup.style.opacity = '1';
        }, 10);
        
        // Définir le cookie pour éviter de re-afficher
        setCookie('exitPopupShown', 'true', config.cookieExpiry);
        
        console.log('Exit Popup: Popup affichée');
    }
    
    // Fermer la popup
    function closePopup() {
        const popup = document.querySelector('.popin_overlay');
        if (!popup) return;
        
        popup.style.opacity = '0';
        setTimeout(() => {
            popup.style.display = 'none';
        }, 300);
        
        console.log('Exit Popup: Popup fermée');
    }
    
    // Détecter la sortie de souris
    function handleMouseLeave(e) {
        if (popupShown) return;
        
        // Vérifier si assez de temps s'est écoulé
        if (Date.now() - entryTime < config.delay) return;
        
        const shouldTrigger = 
            e.clientY <= config.sensitivity ||                    
            e.clientX <= config.sensitivity ||                    
            e.clientX >= (window.innerWidth - config.sensitivity);
        
        if (shouldTrigger) {
            mouseLeaveTimer = setTimeout(() => {
                showPopup();
            }, 100);
        }
    }
    
    // Annuler le déclenchement si la souris revient rapidement
    function handleMouseEnter() {
        if (mouseLeaveTimer) {
            clearTimeout(mouseLeaveTimer);
            mouseLeaveTimer = null;
        }
    }
    
    // Initialiser le script
    function init() {
        if (isMobile() && !config.showOnMobile) {
            console.log('Exit Popup: Désactivé sur mobile');
            return;
        }
        
        if (getCookie('exitPopupShown')) {
            console.log('Exit Popup: Déjà affiché récemment');
            return;
        }
        
        const popup = document.querySelector('.popin_overlay');
        if (!popup) {
            console.warn('Exit Popup: Élément .popin_overlay introuvable');
            return;
        }
        
        popup.style.opacity = '0';
        popup.style.display = 'none';
        popup.style.transition = 'opacity 0.3s ease-in-out';
        
        document.addEventListener('mouseleave', handleMouseLeave);
        document.addEventListener('mouseenter', handleMouseEnter);
        
        const closeElements = document.querySelectorAll('.popin_close-overlay, .popin_close-btn');
        closeElements.forEach(element => {
            element.addEventListener('click', closePopup);
        });
        
        document.addEventListener('keydown', (e) => {
            if (e.key === 'Escape' && popupShown) {
                closePopup();
            }
        });
        
        popup.addEventListener('click', (e) => {
            if (e.target === popup) {
                closePopup();
            }
        });
        
        isMouseTracking = true;
        console.log('Exit Popup: Initialisé avec succès');
    }
    
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', init);
    } else {
        init();
    }
    
    window.ExitPopup = {
        show: showPopup,
        close: closePopup,
        reset: () => {
            setCookie('exitPopupShown', '', -1);
            popupShown = false;
            console.log('Exit Popup: Reset effectué');
        }
    };
    
})();
</script>
  

Modifier les paramètres de la popin

La durée de réapparition : Cherche "cookieExpiry" au tout début du code et modifie la valeur en minute -> "30", "120", "180", etc..

Tuto vidéo

Structure HTML de la popin pour une parfaite accessibilité

Pour avoir une popin accessible et une expérience utilisateur correcte, suis la structure HTML suivante :

Tu aimerais obtenir plus de lead ou de conversions ? Alors ajoute une exit popup à ton site dès maintenant avec notre script !

Envie d'aller plus loin ?
Je m'inscris