首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用局部存储保持侧边栏的位置

使用局部存储保持侧边栏的位置
EN

Stack Overflow用户
提问于 2018-08-05 16:03:23
回答 2查看 5.1K关注 0票数 0

我现在有一个简单的切换按钮,可以折叠/展开我的导航侧边栏:

代码语言:javascript
复制
<div id="sidebar-wrapper" class="extend">
             <button class="collapse-toggle"></button>
   <ul>
     <li></li>
   </ul>
</div>

<script type="text/javascript">
    $('.collapse-toggle').on('click', function(e) {
    $('#sidebar-wrapper').toggleClass("extend collapsed"); //you can list several class names

    e.preventDefault();
     });
 </script>

我希望使用本地存储来记住菜单是否在每次重新加载时被折叠或打开。每个本地存储教程/答案/等等都不太适合我现有的javascript方法来折叠菜单,我想保留它。

我怎么才能把这事做好?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-05 16:58:08

当用户访问页面时,您可以通过读取localStorage中的值来实现这一点。如果存在值,则将菜单设置为状态(打开或关闭)。当没有值时,从菜单中删除collapsed类。这也是最初加载页面时的修补程序。然后打开菜单。

在每个菜单切换中,状态都保存在localStorage中。当用户重新访问页面时,将有一个值存储在localStorage中,并根据状态显示菜单。

由于localStorage对堆栈溢出不起作用,请参阅这个JSFiddle查看它的运行情况。这是代码的副本。

代码语言:javascript
复制
$('document').ready(function() {
  // Code responsible for setting localStorage and toggling when toggle button is clicked.
  $('.collapse-toggle').on('click', function(e) {
    // localStorage.setItem('menu-closed', !$('#sidebar-wrapper').hasClass('collapsed'));
    $('#sidebar-wrapper').toggleClass('collapsed');
  });

  // Code responsible for reading the state of the menu out of localStorage
  // var state = localStorage.getItem('menu-closed');
  var state = "false"  // simulate localStorage

  // When localStorage is not set, open the menu.
  if (state === null) {
    $('#sidebar-wrapper').removeClass('collapsed');
  } else {
    // When localStorage is set, Save the state to the variable closed
    // Here set closed to a boolean true/false value instead of a string "true" or "false"      	
    var closed = state === "true" ? true : false;

    // When the state of the menu is not closed, remove the collapsed class from the sidebar.
    if (!closed) {
      $('#sidebar-wrapper').removeClass('collapsed');
    }
  }
});
代码语言:javascript
复制
input:focus,
select:focus,
textarea:focus,
button:focus {
  outline: none;
}

#sidebar-wrapper {
  background: #2c0963;
  display: flex;
  flex-direction: column;
  height: 100%;
  position: relative;
  transition: all 0.3s;
}


/* Sidebar Collapse */

.extend {
  width: 260px !important;
}

.collapsed {
  width: 65px !important;
}

.collapse-toggle {
  margin-right: -31px;
  position: absolute;
  top: 0;
  background: none;
  border: none;
  width: 60px;
  font-weight: 300;
  line-height: 20px;
  font-size: 29px;
  right: 0px;
  z-index: 1600;
  opacity: 0.7;
  cursor: pointer;
}

.collapse-toggle:hover {
  cursor: pointer;
  opacity: 1;
}
代码语言:javascript
复制
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>

<div id="sidebar-wrapper" class="extend collapsed">
  <button class="collapse-toggle">
      <span style="color:#25dbde; padding-right: 5px;">&#x2039;</span>        <span style="color:#d9d8d8; padding-left: 4px;">&#x203A;</span>
    </button>

  <ul id="menu">
    <li style="color: #fff;">Item 1</li>
  </ul>
</div>

票数 2
EN

Stack Overflow用户

发布于 2018-08-05 16:38:40

下面是一个有用的例子:

代码语言:javascript
复制
if(!localStorage.getItem("toggle")) {
    // Check if theres anything in localstorage already
    localStorage.setItem("toggle", "true");
} else {
    if(localStorage.getItem("toggle") === "true") {
    // toggle was on, turning it off
    localStorage.setItem("toggle", "false");
  }
    else if(localStorage.getItem("toggle") === "false") {
    // toggle was off, turning it on
    localStorage.setItem("toggle", "true")
  }
}

https://jsfiddle.net/cwq4rvsy/25/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51695964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档