微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在某个点停止固定元素滚动

如何解决在某个点停止固定元素滚动

我有固定的侧边栏,它应该与主要内容一起滚动,并在我向下滚动时停在某个点。当我向上滚动时,反之亦然。

我编写了确定窗口高度、滚动位置、侧边栏应该“停止”的位置的脚本。我通过添加 css 'bottom' 属性来停止侧边栏。但是这种方法有两个问题:

  1. 侧边栏接近它应该停止的“分页”时,它突然跳下来。当我向上滚动时,它突然跳了起来。
  2. 当我滚动页面时,侧边栏一直在移动

这是我的代码。 HTML:

<div class="container">
  <aside></aside>
  <div class="content">
    <div class="pagination"></div>
  </div>
  <footer></footer>
</div>

CSS:

aside {
  display: flex;
  position: fixed;
  background-color: #fff;
  border-radius: 4px;
  transition: 0s;
  transition: margin .2s,bottom .05s;
  background: orange;
  height: 350px;
  width: 200px;
}

.content {
  display: flex;
  align-items: flex-end;
  height: 1000px;
  width: 100%;
  background: green;
}

.pagination {
  height: 100px;
  width: 100%;
  background: blue;
}

footer {  
  height: 500px;
  width: 100%;
  background: red;
}

JS:

let board = $('.pagination')[0].offsetTop;
let filterPanel = $('aside');
    if (board <= window.innerHeight) {
        filterPanel.css('position','static');
        filterPanel.css('padding-right','0');
    }

$(document).on('scroll',function () {
    let filterPanelBottom = filterPanel.offset().top + filterPanel.outerHeight(true);
    let bottomDiff = board - filterPanelBottom;

    if(filterPanel.css('position') != 'static') {

        if (window.scrollY + window.innerHeight - (bottomDiff*2.6) >= board)
            filterPanel.css('bottom',window.scrollY + window.innerHeight - board);
        else
            filterPanel.css('bottom','');
    }
});

Here's live demo on codepen

侧边栏标有橙色背景,应停止的块标有蓝色。比你提前提供的帮助。

解决方法

我用 here

描述的解决方案解决了我的问题
app.use(function(req,res,exit) {
    if(req.session.loggedin) {
        app.locals.loggedin = true;
    }
    else {
        app.locals.loggedin = false;
    }
    res.app.use(express.static(path.join(__dirname,'/site/data')))
    exit();
})

并计算坐标作为端点偏移顶部 - 侧边栏高度。您可以在我的 codepen

中查看解决方案

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?