If you are already using timeouts, you can selectively store and clear the timeout IDs to create this effect. The following solution does not utilize the hoverIntent jQuery Plug-in.
HTML
<div id="hover-area">
<div id="one" class="hoverable">One</div>
<div id="two" class="hoverable">Two</div>
<div id="three" class="hoverable">Three</div>
<div id="four" class="hoverable">Four</div>
<div id="one-reveal" class="revealable">One Reveal</div>
<div id="two-reveal" class="revealable">Two Reveal</div>
<div id="three-reveal" class="revealable">Three Reveal</div>
<div id="four-reveal" class="revealable">Four Reveal</div>
</div>
JS
var timeHover = 700;
// Setup reveal and hide on hoverable items
$('.hoverable').on({
'mouseenter': function() {
// Get the hoverable ID
var hoverableId = $(this).attr('id');
// Generate the associated revealable ID
var revealableId = hoverableId + '-reveal';
// Show the associated revealable item (after timeout)
showRevealable('#' + revealableId);
},
'mouseleave': function() {
// Get the hoverable ID
var hoverableId = $(this).attr('id');
// Generate the associated revealable ID
var revealableId = hoverableId + '-reveal';
// Hide the associated revealable item (after timeout)
hideRevealable('#' + revealableId);
}
});
// Set up to maintain visibility and hide for the revealable items
$('.revealable').on({
'mouseenter': function() {
// Clear the timeout for this revealable item
clearRevealableTimeout(this);
},
'mouseleave': function() {
// Hide the revealable item (after timeout)
hideRevealable(this);
}
});
// Clears the timeout for the given revealable container
function clearRevealableTimeout(revealable) {
// Get the associated timeout ID from the data attribute
var timeout = $(revealable).data('timeout');
// Clear the associated timeout
clearTimeout(timeout);
}
// Shows the given revealable item (after a delay)
function showRevealable(revealable) {
// Set a new timeout for the show and get the associated ID
var timeout = setTimeout(function () {
// Hide any existing revealables that are not this one
$('.revealable').not(revealable).hide();
$(revealable).stop().fadeIn();
}, timeHover);
// Store the timeout ID in the data attribute
$(revealable).data('timeout', timeout);
}
// Hides the given revealable item (after a delay)
function hideRevealable(revealable) {
// Clear the timeout to prevent any pending behavior
clearRevealableTimeout(revealable);
// Set a new timeout for the hide and get the associated ID
var timeout = setTimeout(function () {
$(revealable).hide();
}, timeHover);
// Store the timeout ID in the data attribute
$(revealable).data('timeout', timeout);
}