2015-09-11 4 views
0

J'essaie donc d'obtenir une situation de type popup, où l'utilisateur survole un élément, lorsque l'utilisateur survole cet élément, jQuery ajoute une classe à un autre élément frère le rend visible. Lorsque l'utilisateur passe la souris, je voudrais ajouter un délai de 5 secondes avant que la classe ne soit à nouveau supprimée, mais mes tentatives n'ont pas encore abouti, quelqu'un peut-il me donner un pointeur sur la méthode que je peux utiliser?jQuery Hover with Delay lorsque l'utilisateur déplace sa souris

Voici le code que je utilise au moment:

$('.spaceship-container').hover(
function(){ 
    $('.take-me-to-your-newsletter').addClass('show') 
}, 
function(){ 
    setTimeout(3000); 
    $('.take-me-to-your-newsletter').removeClass('show') 
} 
); 
+0

comme ça? $ ('Vaisseau-conteneur '). Vol stationnaire ( fonction \t() { \t \t $ ('. Me prendre-à votre bulletin). AddClass (' tmtyn') \t}, SetTimeOut (3000 , function() {$ ('prends-moi-à-ta-newsletter'). removeClass ('tmtyn') \t}); –

+0

duplication possible de [JavaScript.setTimeout] (http://stackoverflow.com/ questions/10312963/javascript-settimeout) – D4V1D

Répondre

2

Utilisation de la syntaxe correcte de la fonction setTimeout() fixe votre problème. Mais vous devez également arrêter la fonction de souris en utilisant clearTimeout().

var timer; 
$('.spaceship-container').hover(
    function() { 
    clearTimeout(timer); 
    $('.take-me-to-your-newsletter').addClass('show'); 
    }, 
    function() { 
    timer = setTimeout(function(){ 
     $('.take-me-to-your-newsletter').removeClass('show'); 
    }, 3000); 
    } 
); 
+1

Bien que cette réponse soit également correcte, j'élirai celle de @ Guruprasad-Rao correcte en raison de l'ajout d'un niveau d'explication à la réponse Merci –

+1

@RichardGrandi Je suis d'accord avec Rejith , vous voudrez peut-être effacer le 'timeout' à nouveau si vous permettez à l'utilisateur de survoler à nouveau l'élément, sauf si vous couvrez tout le contenu avec une superposition. :) +1 pour bonne réflexion Rejith .. –

+1

@guruprasad rao merci. :-) – RRK

1

Vous devez ajouter le removeClass dans le rappel de setTimeout comme ci-dessous:

$('.spaceship-container').hover(
function(){ 
    $('.take-me-to-your-newsletter').addClass('show') 
}, 
function(){ 
    setTimeout(function(){ 
     $('.take-me-to-your-newsletter').removeClass('show') //here 
    },3000); 
}); 

donc qu'une fois les 3 secondes l'heure est terminée, les lignes à l'intérieur de la fonction de rappel seront exécutées.

Plus un DEMO pour vous