$('.file a').live('mouseenter', function() {
$('#download').stop(true, true).fadeIn('fast');
}).live('mouseleave', function() {
$('#download').stop(true, true).fadeOut('fast');
});
I want the mouseenter
function to have a stop()
and a delay of 1 second.
So, if I hover over #download
the fadeIn
should start after a 1 second delay. If I mouse out meanwhile the fadeIn
shouldn't start. Get me?
I don't really know how to do that, any ideas?
You need to use setTimeout()
in this case because of how .delay()
works (and your inability to cancel it).
$('.file a').live('mouseenter', function() {
$.data(this, 'timer', setTimeout(function() {
$('#download').stop(true, true).fadeIn('fast');
}, 1000));
}).live('mouseleave', function() {
clearTimeout($.data(this, 'timer'));
$('#download').stop(true, true).fadeOut('fast');
});
If you use .delay()
it'll dequeue the next animation for the element, regardless of if you cleared that queue earlier. So you need a timeout that you can cancel, which the above does by manually calling setTimeout()
and storing the result with $.data()
so you can clear it later, via clearTimeout()
.