2015-09-11 3 views
0

Итак, я пытаюсь достичь всплывающей ситуации, когда пользователь будет нависеть над одним элементом, когда пользователь наводится на этот элемент, jQuery добавляет класс к другому элементу-брату, который делает его видимым. Когда пользователь зависает, я хотел бы добавить задержку как 5 секунд, прежде чем класс будет удален снова, но мои попытки сделать это пока не сработали, может кто-нибудь дать мне указатель на какой метод я могу использовать?jQuery Hover with Delay, когда пользователь перемещает их мышью

Вот код, я использую в данный момент:

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

вот так? $ ('Космический корабль-контейнер '). Зависать ( \t функции() { \t \t $ ('. Берите меня к вашему бюллетеню '). AddClass (' tmtyn') \t}, SetTimeout (3000 , function() {$ ('. take-me-to-your-newsletter'). removeClass ('tmtyn') \t}); –

+0

Возможный дубликат [JavaScript.setTimeout] (http://stackoverflow.com/ вопросы/10312963/javascript-settimeout) – D4V1D

ответ

2

Использование правильного синтаксиса setTimeout() функция устраняет проблему. Но вам также нужно остановить функцию мыши, используя 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

Хотя этот ответ также верен, я изберу его по правильной настройке @ Гурупрасад-Рао из-за добавления в ответ ответа. –

+1

@RichardGrandi. Я согласен с Rejith , вы можете снова очистить «тайм-аут», если вы позволите пользователю снова навешивать элемент, если вы не покрываете весь материал каким-либо наложением .. :) +1 для хорошо мысль Rejith .. –

+1

@guruprasad rao спасибо. :-) – RRK

1

Вы должны добавить removeClass внутри обратного вызова setTimeout, как показано ниже:

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

Так что, как только 3 секунды время будет завершено, линии внутри функции обратного вызова будут выполнены.

Плюс DEMO для вас