var $menu = $("#menu");
var opacity = $menu.css("opacity");
var scrollStopped;
var fadeInCallback = function () {
if (typeof scrollStopped != 'undefined') {
clearInterval(scrollStopped);
}
scrollStopped = setTimeout(function () {
$menu.animate({ opacity: 1 }, "slow");
}, 2000);
};
$(window).scroll(function () {
if (!$menu.is(":animated") && opacity == 1) {
$menu.animate({ opacity: 0 }, "slow", fadeInCallback);
} else {
fadeInCallback.call(this);
}
});
http://jsfiddle.net/zsnfb/9/
Это устанавливает событие прокрутки, чтобы сделать несколько вещей. Сначала он сбрасывает тайм-аут, чтобы снова исчезнуть div меню. После этого, если меню еще не исчезло, меню исчезает и устанавливает время ожидания в обратном вызове. Если меню уже исчезло, оно просто устанавливает время ожидания. Если пользователь прекратит прокрутку, меню исчезнет через 2 секунды.
Существуют и другие решения, использующие fadeOut () и fadeIn (). Моя единственная проблема с этими функциями в этом случае заключается в том, что установка display: none;
для div меню повлияет на макет страницы, где установка visibility: hidden;
или opacity: 0;
не должна влиять на макет.