javascript - 滚动速度比主要内容慢的侧边栏
问题描述
这是不可能的吗?我正在使用 CSS 和 HTML,我有一个侧边栏,并且我已经找到了让它粘住的方法(根本不滚动),但是我找不到任何视差示例。
我真的很想避免使用 JS。
<html container>
<content>
<left column>
This content is very very long and goes for a long way down.
</left column>
<right column>
This is the sidebar and is much shorter, so I want it to scroll slower than the main content.
</right column>
</content>
</html>
如果没有javascript,这甚至可能吗?
解决方案
使用 CSS3 透视图这确实是可能的。事实上,由于视差是由浏览器处理的,它可能会比使用 JavaScript 更流畅。缺点是较旧的浏览器将不支持它。
CSS3 透视涉及沿 Z 轴变换元素。更远的元素滚动速度会更慢。因此,您不会沿 Z 轴转换主要内容,使其以默认速度滚动,并且您将沿 Z 轴向下转换侧边栏 - 可以说远离用户 - 使其滚动速度变慢。
当您转换到 Z 轴时,边栏将变得更小(如果您向上移动轴,则边栏会变大),因为它离用户越远。您需要计算其距离的正确比例并应用它,使其显示为原始大小。
由于您尚未提供 CSS,我无法保证此代码适用于您当前的实现。但它通常会像这样工作:
content {
...
perspective: 1px;
height: 100vh;
overflow-x: hidden;
}
column {
...
position: absolute;
top: 0;
right: 0;
bottom: 0;
}
left {
left: 0;
transform: translateZ(0);
}
right {
left: 50%;
transform: translateZ(-1px) scale(2);
}
使用 perspective 和 translateZ 值,以原始大小显示的比例因子为 1 + (translateZ * -1) / perspective。
在https://codepen.io/jla-/pen/NOGxpQ中可以找到一个用长内容部分和更短、更慢的滚动侧边栏来演示这一点的 codepen 。
本文有更多关于在 CSS 中实现视差效果的信息。
推荐阅读
- vue.js - 将路由器链接添加到 Vuetify 树视图
- html - Elastic Beanstalk 上对 index.html 的更改
- ios - 使用firebaseUI ios swift进行电话身份验证
- c - strcpy 在特定内存地址返回值加垃圾
- python - 执行 NER(命名实体识别)的过程 - NLP
- uwp - 在外围设备端断开连接后(重新)连接 - UWP
- python - 如何在 Pandas 中过滤带有条件空白字段的记录
- video - FFmpeg 丢失视频文件的转换
- tensorflow.js - 如何检查 tfjs 模型是否正确加载到浏览器
- r - 一个运行完全相同的数据,另一个不在 R 中类似 lm() 的函数中运行