Подтвердить что ты не робот

JQuery.on( "mouseenter" ) - подождите 2 секунды, затем выполните действие

У меня есть script, который показывает скрытый текст, когда вы наводите курсор на div. Но я хочу, чтобы это было отложено на 2 секунды, и если пользователь отталкивает мышь до 2 секунд, я не хочу ничего показывать.

Как это сделать?

Что у меня: http://jsfiddle.net/ZhrJT/

-

HTML:

<body>
    <div>hover this</div>
    <p class="hidden">unhidden!!</p>
</body>

JS:

$("body").on("mouseenter", "div", function(){
    $("p").removeClass("hidden");
}).on("mouseleave", "div", function(){
    $("p").addClass("hidden");
});

CSS

div {
    background-color:red;
    height:100px;
}

p.hidden {
    display:none;  
}

p {
    background-color:yellow; 
    height:100px;   
}
4b9b3361

Ответ 1

var timer;
$("body").on("mouseenter", "div", function(){
    timer = setTimeout(function () {
        $("p").removeClass("hidden");
    }, 2000);
}).on("mouseleave", "div", function(){
    clearTimeout(timer);
    $("p").addClass("hidden");
});

Там я пойду, это так просто. Просто установите тайм-аут, который скроет элемент при его запуске и отменит таймаут, если пользователь mouseleave элемент.

Ответ 2

Используйте setTimeout/clearTimeout. Что-то вроде этого:

$("body").on("mouseenter", "div", function(){
    $(this).data('timeout', setTimeout(function(){
       $("p").removeClass("hidden");
    }, 2000));
}).on("mouseleave", "div", function(){
    clearTimeout($(this).data('timeout'));
    $("p").addClass("hidden");
});