【问题标题】:Sidebar navigation appears and then disappears on page load when using jquery localStorage使用 jquery localStorage 时,侧边栏导航出现然后在页面加载时消失
【发布时间】:2017-02-05 00:49:20
【问题描述】:

我正在使用 jQuery localStorage 来记住侧边栏导航菜单的切换状态,方法如下 jQuery代码:

$('#wrapper').toggleClass(window.localStorage.toggled);
$('#menu-toggle').on('click',function(e)
{
    e.preventDefault();
    if (window.localStorage.toggled != "toggled" ) 
    {
        $('#wrapper').toggleClass("toggled", true );
        window.localStorage.toggled = "toggled";
    } 
    else 
    {
        $('#wrapper').toggleClass("toggled", false );
        window.localStorage.toggled = "";
    }
});

通过记住切换状态,代码可以正常工作。刷新页面时会出现问题。侧边栏导航菜单先出现然后消失。我已经尝试在 css 中设置 display:none 但它似乎不起作用。

相关html代码:

<a href="#menu-toggle" class="btn btn-default" id="menu-toggle"><span class="glyphicon glyphicon-th-list"></span></a>

<div id="wrapper">
</div>

【问题讨论】:

    标签: javascript jquery css html


    【解决方案1】:

    以下是我将如何实现您的目标。请注意,我使用了 sn-p 来组织代码,但由于沙盒不允许访问本地存储,因此它不适用于 SO。但是,您可以看到它的实际效果..

    Working jsFiddle

    /**
     * Feature detect + local reference for simple use of local storage
     * if (storage) {
     *    storage.setItem('key', 'value');
     *    storage.getItem('key');
     * }
     */
    var storage;
    var fail;
    var uid;
    try {
      uid = new Date;
      (storage = window.localStorage).setItem(uid, uid);
      fail = storage.getItem(uid) != uid;
      storage.removeItem(uid);
      fail && (storage = false);
    } catch (exception) {}
    /* end  Feature detect + local reference */
    
    $(function() {
    
      if (storage) {
        $('#wrapper').toggleClass('isOpen', storage.getItem('isOpen') == '1');
        $('#menu-toggle').on('click', function(e) {
          e.preventDefault();
          var setOpen = storage.getItem('isOpen') == '1' ? 0 : 1; // set opento the oposite of current
          storage.setItem('isOpen', setOpen);
          $('#wrapper').toggleClass('isOpen', setOpen);
        });
      } 
      
    });
    #wrapper:not(.isOpen) {
      display: none;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <a href="#menu-toggle" class="btn btn-default" id="menu-toggle"><span class="glyphicon glyphicon-th-list"></span></a>
    
    <div id="wrapper">
      some content here
    </div>

    【讨论】:

    • 嗨,DelightedD0D,代码在全屏上完美运行。但是,当我使用引导程序将屏幕大小调整为 768 像素或更低时,jQuery 切换按钮停止工作。知道为什么会这样吗? .提前致谢。
    • @FarizAnwardeen 我不确定,我链接到的 jsFiddle 已加载引导程序。我尝试使窗口尽可能薄(如 100 像素)并且按钮仍按预期工作。我猜想在您的实际 HTML 中,您有另一个组件或其他可能与按钮冲突的 CSS(例如位于按钮上方的透明 div 或类似的东西),但没有看到它实际发生,我不能说。如果您可以制作一个显示行为的示例小提琴,我很乐意查看它。
    • 我检查了我的代码,发现像你说的那样存在 css 冲突。添加溢出-y:自动;在第 28 行导致切换停止工作。如果我删除该特定行,我的侧边栏包装背景颜色就会消失。你也知道当用户第一次进入我的网站时,我如何让侧边栏默认可见。谢谢。这是 JsFiddle LINK TO CODE 的链接
    猜你喜欢
    • 2019-09-04
    • 1970-01-01
    • 2018-05-10
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 2021-10-04
    • 1970-01-01
    相关资源
    最近更新 更多