我的移动菜单代码在页面加载时首先闪烁菜单,然后隐藏

Posted

技术标签:

【中文标题】我的移动菜单代码在页面加载时首先闪烁菜单,然后隐藏【英文标题】:My mobile menu code flashes the menu first when page loads, then hides 【发布时间】:2017-06-16 02:36:18 【问题描述】:

我已经在几个站点上使用了这个脚本,并且它已经到了我有这么多站点都存在相同错误的地步,我需要帮助一劳永逸地解决这个问题,所以我不会继续将相同的错误转移到新的生产服务器

我让一个承包商为 WordPress 移动菜单提出了以下建议。它工作得很好,但不幸的是,当页面首次加载时,菜单会加载内容,然后隐藏。我一生都无法弄清楚是什么导致了这种情况,或者我应该在代码中添加什么额外的 javascript 命令来删除页面加载时的隐藏。

这里是 jquery:

<script type="text/javascript">
//mobile menu
jQuery(function() 
    jQuery('#menu_btn').click(function() 
        if(jQuery('#main_menu').is(':visible')) 
            jQuery('#main_menu').animate( left: '-100%' , 'slow', function ()  
                jQuery("#main_menu").css('display', 'none');
                jQuery('#menu_close').css('display', 'none');  
            );
         else 
            jQuery("#main_menu").css('display', 'block');
            jQuery('#main_menu').animate( left: '0' , 'slow', function()
                jQuery('#menu_close').css('display', 'block'); 
            );
        
    );

    jQuery('#menu_close').click(function() 
        jQuery('#main_menu').animate( left: '-100%' , 'slow', function ()  
            jQuery("#main_menu").css('display', 'none'); 
        );
    );

    callOnResize();
);

jQuery(window).resize( function()
    callOnResize();
);

function callOnResize() 
    var winwidth = jQuery(window).width();
    if (winwidth < 760) 
        jQuery( '#main_menu' ).css( display: 'none' );
        jQuery('#main_menu').animate( left: '0' , 'slow');
     else if (winwidth >= 760) 
        jQuery( '#main_menu' ).css( display: 'block' );
    

</script>

它适用于具有以下内容的任何菜单:

<ul id="main_menu">
<li>item</li>
<li>item</li>
<li>item</li>
<li>item</li>
</ul>

我们将不胜感激您花在这方面的任何时间。

【问题讨论】:

【参考方案1】:

您的菜单应该在一开始就隐藏起来并且不可见。这样做:

 #main_menu left: -100%; display: none;
 #menu_close display: none;  

【讨论】:

当我把它添加到这里 - zachis.it - 页面加载时菜单仍然闪烁。想法? 首先,您提到的网站已关闭。现在该站点已启动,但我没有看到我的建议的实施。而你没有接受我的回答。 view-source:zachis.it - 第 145 和 146 行。我取消选择您的答案,因为它在我的网站上不起作用。 第 145 和 146 行是在调整大小等时触发的 Javascript 代码。我建议将默认样式添加到您的 CSS 中,使其以隐藏状态开始。修复在样式/CSS 中,而不是在 JavaScript 中。 嗯。我刚刚将它添加到另一个网站,我正在使用这个脚本 - chinesebloomington.com - 它并没有解决问题。【参考方案2】:

作为Allen 说你必须像这样从 javascript 中删除 callOnResize() 函数:

 <script type="text/javascript">
//mobile menu
jQuery(function() 
    jQuery('#menu_btn').click(function() 
        if(jQuery('#main_menu').is(':visible')) 
            jQuery('#main_menu').animate( left: '-100%' , 'slow', function ()  
            jQuery("#main_menu").css('display', 'none');
            jQuery('#menu_close').css('display', 'none');  
        );
     else 
        jQuery("#main_menu").css('display', 'block');
        jQuery('#main_menu').animate( left: '0' , 'slow', function()
            jQuery('#menu_close').css('display', 'block'); 
        );
    
);


 jQuery('#menu_close').click(function() 
        jQuery('#main_menu').animate( left: '-100%' , 'slow', function ()  
            jQuery("#main_menu").css('display', 'none'); 
        );
    );
);
</script>

只需添加这样的 css 即可根据屏幕大小显示/隐藏菜单:

@media screen and (max-width: 760px) 
 #main_menu 
   display: none;
   


@media screen and (min-width: 761px) 
    #main_menu 
        display: block;
    

【讨论】:

【参考方案3】:

在你的 CSS 中添加媒体规则,如下所示,然后从你的 js 中删除 callOnResize()。

@media screen and (max-width: 760px) 
    #main_menu 
        display: none;
    


@media screen and (min-width: 761px) 
    #main_menu 
        display: block;
    

【讨论】:

我用于移动菜单的代码一定是超级错误,因为您提出的这个解决方案不起作用。当我删除 callOnResize() 然后菜单显示并且永远不会被删除。 你脑子里加了css规则吗? 好的,你建议的工作。我将 css 添加到头文件的头部并删除了 callOnResize()。但它仅在我将媒体查询放在头文件的头部时才有效。当我把它放在我的css文件中时它不起作用。对此有什么想法?

以上是关于我的移动菜单代码在页面加载时首先闪烁菜单,然后隐藏的主要内容,如果未能解决你的问题,请参考以下文章

悬停时停止 CSS 动画

使用vue时会出现加载渲染页面时闪烁问题

如何在小于 600 像素的屏幕上“打开”页面加载时的 Bootstrap 下拉菜单

滚动上带有隐藏导航栏的页面菜单

div 没有响应 display:block;

导航栏切换器仅在纵向,而不是横向移动