我有一个粘性的侧边栏,它的高度为calc(100vh-90px)和Main.侧边栏有一些动态内容,所以当内容大于高度时,它会有滚动条.正文的内容很多,所以很长.当Main到达页脚时,是否可以使侧边栏滚动到底部?用侧边栏height: auto,它可以工作,但我想要有准确的屏幕高度.任何关于这方面的线索都将不胜感激.

最小的html如下所示;

<nav></nav>
<div class="wrapper">
<div class="main"></div>
<div class="sidebar></div>
</div>
<footer/>

侧边栏上的css是;

position: sticky;
top: 90px;
height: calc(100vh-90px);
overflow-y: scroll;

推荐答案

使用footerInView检测页脚的位置.

将侧边栏的滚动条移到底部sidebar.scrollTop.

const footerInView = () => window.scrollY + window.innerHeight > document.querySelector('footer').offsetTop
const sidebar = document.querySelector('.sidebar')
document.addEventListener('scroll', () => {
  if (footerInView()) sidebar.scrollTop = sidebar.scrollHeight
})
html {
  scroll-behavior: smooth;
}

.sidebar {
  background: black;
  color: white;
  width: 400px;
  position: sticky;
  top: 90px;
  height: calc(100vh - 90px);
  overflow-y: scroll;
}

footer {
  height: 100px;
  background: black;
}
<nav></nav>
<div class="wrapper">
  <div class="sidebar">
    <div style="height:2000px;display: flex;align-items: end;">sidebar bottom</div>
  </div>
  <div class="main" style="height: 2000px;"></div>
</div>
<footer>
  footer
</footer>

Javascript相关问答推荐

在nodejs中使用快速路由的API路径

在TypScript中计算使用旋转谷仓的鸡舍所需的农场数量

使用ReactJS对Ant Design表中的空值进行排序

我可以后增量超过1(最好是内联)吗?

强制执行useStatego struct 化变量[foo,setFoo]的命名约定?

在贝塞尔曲线的直线上找不到交叉点:(使用@Pomax的bezier.js)

如何最好地从TypScript中的enum获取值

Cypress -使用commands.js将数据测试id串在一起失败,但在将它们串在一起时不使用命令有效

提交表格后保留Web表格中的收件箱值?

单击子元素时关闭父元素(JS)

如何在Obsidian dataview中创建进度条

如何避免页面第一次加载时由于CSS样式通过JavaScript更改而出现闪烁

Web Crypto API解密失败,RSA-OAEP

如何在Svelte中从一个codec函数中调用error()?

环境值在.js文件/Next.js中不起作用

当用户点击保存按钮时,如何实现任务的更改?

DOM不自动更新,尽管运行倒计时TS,JS

AddEventListner,按键事件不工作

P5.js中矩形内的圆弧

AG-GRIDreact 显示布尔值而不是复选框