javascript - Bootstrap 4 滚动到长粘边栏的底部

标签 javascript jquery html css twitter-bootstrap

我正在努力实现像 Facebook 一样的右侧导航。当侧边栏内容高于视口(viewport)时,如果您向下滚动侧边栏,则应在它粘在屏幕上之前滚动到最底部。

JSFiddle

    <div class="container-fluid">
    <div class="row">
        <div class="col-md-12">
            <div class="header">
                Header
            </div>
        </div>


        <div class="col-md-9 col-sm-9 col-xs-9">
          <div class="main-content">
              Main Content
          </div>
        </div>

        <div class="col-md-3 col-sm-3 col-xs-3">
            <div class="sidebar-right sticky-top">
                Sidebar Content

                <div class="content-bottom">
                      Content
                </div>
            </div>
        </div>

        <div class="col-md-12">
            <div class="footer">
                Footer
            </div>
        </div>
    </div>
</div>

最佳答案

我想出了一个解决问题的方法,使用 jQuery 使侧边栏根据视口(viewport)和侧边栏的高度 ( fiddle here ) 粘在负位置:

function setPosition() {
  $(".sidebar-right").css({
    'position': 'sticky',
    'top': window.innerHeight - $(".sidebar-right").innerHeight()
  });
}

// Set initial positioin
setPosition();

// Adjust position when window is resized
$(window).resize(setPosition);
.header {
  width: 100%;
  background-color: green;
  text-align: center;
  padding: 15px 20px;
  color: #fff;
}

.sidebar-left {
  background-color: purple;
  color: #fff;
  padding: 15px;
  height: 500px;
}

.sidebar-right {
  background-color: purple;
  color: #fff;
  padding: 15px;
  height: 500px;
}

.main-content {
  background-color: red;
  height: 900px;
  color: #fff;
  padding: 15px;
}

.footer {
  width: 100%;
  background-color: green;
  text-align: center;
  padding: 15px 20px;
  color: #fff;
}

.content-bottom {
  position: absolute;
  bottom: 0;
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container-fluid">
  <div class="row">
    <div class="col-md-12">
      <div class="header">
        Header
      </div>
    </div>


    <div class="col-md-9 col-sm-9 col-xs-9">
      <div class="main-content">
        Main Content
      </div>
    </div>

    <div class="col-md-3 col-sm-3 col-xs-3 sb">
      <div class="sidebar-right">
        Sidebar Content

        <div class="content-bottom">
          Content
        </div>
      </div>
    </div>

    <div class="col-md-12">
      <div class="footer">
        Footer
      </div>
    </div>
  </div>
</div>

如果您不想使用 jQuery,您可以将 sticky-top 类添加到侧边栏底部的元素(它看起来不太正确)。 Fiddle here (调整窗口大小,使侧边栏的文本长于窗口高度)。

.header {
  width: 100%;
  background-color: green;
  text-align: center;
  padding: 15px 20px;
  color: #fff;
}

.sidebar-left {
  background-color: purple;
  color: #fff;
  padding: 15px;
  height: 500px;
}

.sidebar-right {
  background-color: purple;
  color: #fff;
  padding: 15px;
  height: 100%;
}

.main-content {
  background-color: red;
  height: 900px;
  color: #fff;
  padding: 15px;
}

.footer {
  width: 100%;
  background-color: green;
  text-align: center;
  padding: 15px 20px;
  color: #fff;
}

.content-bottom {
  position: absolute;
  bottom: 0;
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container-fluid">
  <div class="row">
    <div class="col-md-12">
      <div class="header">
        Header
      </div>
    </div>


    <div class="col-md-9 col-sm-9 col-xs-9">
      <div class="main-content">
        Main Content
      </div>
    </div>

    <div class="col-md-3 col-sm-3 col-xs-3">
      <div class="sidebar-right">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer quis turpis enim. Sed non lacinia lacus.

        <div class="sticky-top">
          Curabitur lorem lorem, efficitur sit amet ex non, viverra porttitor odio.
        </div>
      </div>
    </div>

    <div class="col-md-12">
      <div class="footer">
        Footer
      </div>
    </div>
  </div>
</div>

关于javascript - Bootstrap 4 滚动到长粘边栏的底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56764900/

相关文章:

javascript - 将鼠标悬停在 img 上时会显示所有 div

javascript - 如何将 HTML 文本插入 jQuery

javascript - 我怎样才能让它在弹出框中得到有效答案之前才开始

javascript - 一旦 HTML 在 Angular 4 中完全动态呈现,我如何在 jQuery 中调用函数?

javascript - 如何制作包含在浏览器上呈现的电话号码的 JSON 元素,以便单击它们即可调用该号码

javascript - 具有更改表单 ID 的选择器

javascript - 在数组 typescript 和 angularjs 和 ionic 中查找值

Jquery变量问题

javascript - 具有回调行为的 jQuery .attr()

php - 不要使用 JavaScript 提交 MYSQL 数据库中的现有值