当用户到达页面底部时关闭弹出菜单

Posted

技术标签:

【中文标题】当用户到达页面底部时关闭弹出菜单【英文标题】:Close the pop-up menu when user reach the bottom of the page 【发布时间】:2021-02-25 10:54:27 【问题描述】:

我有一个简单的菜单,点击即可打开。

我需要的是:

    点击左上角打开菜单/汉堡 用户已阅读所有文本并 向下滚动 第 3.3 步 - 当用户到达页面末尾时关闭/隐藏弹出菜单

我恳请在我的 js 代码中添加一个 sn-p 代码

$(document).ready(function() 
    $(".toggle-nav").click(function(e) 
        e.stopPropagation();
        e.preventDefault();
        $(this).toggleClass("active");
        $(".menu ul").toggleClass("active");
    );
    $(document).click(function(e)
      if(!e.target.closest("ul") && $(".menu a").hasClass("active"))
         $(".menu ul").toggleClass("active");
         $(".toggle-nav").toggleClass("active");
      
    )
    
);

Here是我用来测试功能的codepen

很好的解决方案?

附言显然,每次用户切换汉堡按钮时,该操作都需要起作用

【问题讨论】:

【参考方案1】:

用这个替换你的 jQuery

$(document).ready(function () 

    $(".toggle-nav").click(function (e) 
        e.stopPropagation();
        e.preventDefault();
        $(this).toggleClass("active");
        $(".menu ul").toggleClass("active");
    );

    $(document).click(function (e) 
        if (!e.target.closest("ul") && $(".menu a").hasClass("active")) 
            $(".menu ul").toggleClass("active");
            $(".toggle-nav").toggleClass("active");
        
    );


    $(window).scroll(function () 
        var scrollPos = $(document).scrollTop();
        var hgt = $('.menu').height();
        var win = $(window).height();

        if (hgt - win === scrollPos) 
            $(".menu ul").toggleClass("active");
            $(".toggle-nav").toggleClass("active");
        
    );

);

版本 2: 带淡出

要使此选项起作用,您需要将 id="fadeout" 添加到 ul 元素。

$(document).ready(function () 

    $(".toggle-nav").click(function (e) 
        e.stopPropagation();
        e.preventDefault();
        $(this).toggleClass("active");
        $(".menu ul").toggleClass("active");
    );

    $(document).click(function (e) 
        if (!e.target.closest("ul") && $(".menu a").hasClass("active")) 
            $(".menu ul").toggleClass("active");
            $(".toggle-nav").toggleClass("active");
        
    );


    $(window).scroll(function () 
        var scrollPos = $(document).scrollTop();
        var hgt = $('.menu').height();
        var win = $(window).height();

        if (hgt - win === scrollPos) 
            $('#fadeout').fadeOut("slow", function () 
                $(".menu ul").toggleClass("active");
                $(".toggle-nav").toggleClass("active");
                $('#fadeout').removeAttr("style");
            );
        
    );

);

【讨论】:

菜单关闭时是否还有淡出菜单的方法? 您可以尝试使用 FadeOut 的“版本 2” 打开@54ka时如何淡入?很抱歉打扰您的技能;) 我试过了,但要做到这一点,您必须在代码中更改太多内容。最好不要这样做:)【参考方案2】:

我发现这段代码可以帮助你(它几乎适用于所有浏览器), 它只留下了关闭弹出窗口的代码

更新 (评论中的网址我这里无法添加)。

【讨论】:

嘿嘿,这已经是我的密码笔了!你发给我的链接和我发的一样 查看这个codepen.io/youba/pen/ZEOwYyR(我无法添加网址) 感谢 Youba,但当我到达页面底部时没有关闭或提醒任何内容 它对我有用!!检查您是否在正确的网址而不是旧网址中【参考方案3】:

您可以使用 jQuery scroll 来检测滚动是否到达底部并在 true 时添加切换,如下所示:

$(window).scroll(function () 
  if ($(window).scrollTop() + $(window).height() == $(document).height()) 
    if ($(".menu a").hasClass("active")) 
      $(".menu ul").toggleClass("active");
      $(".toggle-nav").toggleClass("active");
    
  
);

Codepen

【讨论】:

【参考方案4】:

这应该可行:

var menu = document.getElementById("Menu");
window.onscroll = function(ev) 
    if ((window.innerHeight + window.scrollY) >= menu.offsetHeight) 
      if($(".menu a").hasClass("active"))
         $(".menu ul").toggleClass("active");
         $(".toggle-nav").toggleClass("active");
      
    
;

然后在你的 <ul> 标签上,给它一个 id Menu

【讨论】:

以上是关于当用户到达页面底部时关闭弹出菜单的主要内容,如果未能解决你的问题,请参考以下文章

mui 弹出菜单 选择后怎么关闭

Youtube 模态弹出关闭问题

在自定义视图上显示弹出菜单时不要关闭键盘

Antd - 是不是可以阻止空格键关闭弹出菜单?

解决input获取焦点时底部菜单被顶上来问题

弹出菜单(PopUp Menus)