当滚动条与jQuery一起移动时如何隐藏Div?

Posted

技术标签:

【中文标题】当滚动条与jQuery一起移动时如何隐藏Div?【英文标题】:How to hide a Div when the scroll bar is moving with jQuery? 【发布时间】:2011-11-15 11:58:24 【问题描述】:

我只希望#menu 在滚动条移动时淡出,以提供一个不那么杂乱的界面。是否有代码允许这样做?

我想基本上我正在寻找的是如何获取滚动条移动事件。在滚动 1 秒后慢慢淡出 #menu,并在滚动条不活动 2 秒后恢复 #menu

非常感谢!

【问题讨论】:

如果停止滚动,#menu 是否必须淡入? @Joe,我正在滚动整个窗口(文档窗口)。 @Mohammad 我想您应该将其添加到您的问题中;) 【参考方案1】:
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; 不应该影响布局。

【讨论】:

很好的例子!但你知道为什么它在这里不起作用吗? jsfiddle.net/zsnfb 我的错!您无法清除尚不存在的区间!我的答案已更新。 我将此标记为更好的答案,因为它考虑了同时触发的后续滚动事件并防止函数调用过载。 p.s.你在 fadeInCallback 定义之后缺少一个分号:) 很抱歉添加了“谢谢”评论,但这是一个很好的答案,确实帮助了我 - 我一直在通过堆栈寻找正确的解决方案。【参考方案2】:

正确使用以下内容:

$('body').scroll(function()
    $('#menu').fadeOut();

    var scrollA = $('body').scrollTop();

    setTimeout(function()
        if(scrollA == $('body').scrollTop())
            $('#menu').fadeIn();
        
    , 200);
)

所以我们记录滚动量,等待 200 毫秒,然后查看滚动是否发生了变化,如果没有,我们将菜单淡入。

【讨论】:

请问您为什么在滚动事件中具有淡入功能?还会火吗?谢谢! 显然,除非先淡出,否则淡入不会发生。检查需要在 Fade out 函数中进行。 jQuery 允许您嵌套函数,是的,它确实会触发。请查看:jsfiddle.net/LJVMH 以获取此实现的示例。 谢谢,我想这是我对函数如何工作的误解。我想..你怎么能在滚动事件本身中检查 scrollTop 是否相同?!这就是让我感到困惑的地方。谢谢两位的澄清!还有一个很好的例子! @Tom Walters:你知道如何避免滚动条移动不规律时淡入淡出功能溢出,导致框在滚动条后多次淡入淡出已经停止了吗?超时会导致函数完成暂停,从而导致一组备份的未完成火灾,即使在事件很久以前完成后,也会逐渐一个接一个地触发。我真的很感激。您可以在演示中通过快速移动滚动条对其进行测试。【参考方案3】:

我想这就是你要找的http://jsfiddle.net/wfPB6/

【讨论】:

滚动不活动 2 秒后菜单需要重新出现。

以上是关于当滚动条与jQuery一起移动时如何隐藏Div?的主要内容,如果未能解决你的问题,请参考以下文章

使用jQuery移动滚动条

当鼠标一段时间没有移动时,用jQuery隐藏div元素?

word 中水平滚动条与垂直滚动条怎样设置与取消??

div随鼠标移动

jQuery window.scroll 向相反方向垂直移动 div

设置一个div网页滚动时,使其固定在头部,当页面滚动到距离头部300px时,隐藏该div,小于30