移动:当用户点击图标打开菜单时,保持其滚动位置?

时间:2018-01-07 11:04:58

标签: html css

问题:

  

鉴于我所处的是针对移动设备优化的网站

     

然后我点击图标从固定位置标题打开导航菜单

     

然后我的滚动位置丢失,页面滚动回到顶部。

我在position: fixed上使用body,以防止在菜单打开时网站可滚动。

然而,当菜单打开时,页面会滚动'由于在身体上使用position: fixed,因此返回到顶部。

这是一个显示问题的GIF(iPhone模拟器Safari)。请注意,我首先向下滚动页面,然后打开菜单,然后我发现我已经滚动到页面顶部:

enter image description here

过去,为了解决这个问题,我在用户打开菜单时保留了页面的滚动位置,并在打开菜单时将其滚动到那里。我认为这是一个没有高效或实用的黑客。

代码:



$('#menu-icon').on('click', () => {
  $('nav').toggle()
  $('body').toggleClass('overlay-visible')
})

header {
  position: fixed;
  background-color: white;
  padding: 20px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.overlay-visible {
  overflow: hidden;
  position: fixed;
}

.container {
  padding-top: 80px;
}

#menu-icon {
  font-size: 30px;
}

nav {
  display: none;
  z-index: 10;
  position: fixed;
  top: 80px;
  left: 0;
  right: 0;
  bottom: 0;
  padding-bottom: 48px;
  font-size: 15px;
  overflow-y: scroll;
  -webkit-overflow-scrolling: touch;
  background-color: rgba(0, 0, 0, 0.5);
}

ul {
  background-color: dodgerblue;
}

li {
  padding: 20px;
}

img {
  width: 100%;
}

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
  <title>Document</title>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/marx/2.0.7/marx.min.css">
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>
<body>
  <header>
    <div>My page</div>
    <div id="menu-icon">≡</div>
  </header>
  <nav>
    <ul>
      <li>Home</li>
      <li>Settings</li>
      <li>Profile</li>
      <li>Pictures</li>
      <li>Social</li>
    </ul>
  </nav>
  <div class="container">
    <img src="http://lorempixel.com/375/200/">
    <img src="http://lorempixel.com/375/210/">
    <img src="http://lorempixel.com/375/220/">
    <img src="http://lorempixel.com/375/230/">
    <img src="http://lorempixel.com/375/240/">
  </div>
</body>
</html>
&#13;
&#13;
&#13;

TL; DR:如何向用户显示固定位置导航,而不会在页面打开时滚动页面,还能保持其滚动位置?

1 个答案:

答案 0 :(得分:-1)

&#13;
&#13;
$('#menu-icon').on('click', () => {
  $('nav').toggle()
  /* $('body').toggleClass('overlay-visible') */
})
&#13;
header {
  position: fixed;
  background-color: white;
  padding: 20px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.overlay-visible {
  overflow: hidden;
  position: fixed;
}

.container {
  padding-top: 80px;
}

#menu-icon {
  font-size: 30px;
}

nav {
  display: none;
  z-index: 10;
  position: fixed;
  top: 80px;
  left: 0;
  right: 0;
  bottom: 0;
  padding-bottom: 48px;
  font-size: 15px;
  overflow-y: scroll;
  -webkit-overflow-scrolling: touch;
  background-color: rgba(0, 0, 0, 0.5);
}

ul {
  background-color: dodgerblue;
}

li {
  padding: 20px;
}

img {
  width: 100%;
}
&#13;
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
  <title>Document</title>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/marx/2.0.7/marx.min.css">
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>
<body>
  <header>
    <div>My page</div>
    <div id="menu-icon">≡</div>
  </header>
  <nav>
    <ul>
      <li>Home</li>
      <li>Settings</li>
      <li>Profile</li>
      <li>Pictures</li>
      <li>Social</li>
    </ul>
  </nav>
  <div class="container">
    <img src="http://lorempixel.com/375/200/">
    <img src="http://lorempixel.com/375/210/">
    <img src="http://lorempixel.com/375/220/">
    <img src="http://lorempixel.com/375/230/">
    <img src="http://lorempixel.com/375/240/">
  </div>
</body>
</html>
&#13;
&#13;
&#13;