·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

纯css滚动进度条,横向进度条随着页面滚动而变化

505 2
发表于 2021-2-8 10:29:11 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
效果如下:
纯css滚动进度条,横向进度条随着页面滚动而变化 滚动,进度,进度条,横向,随着
鼠标往下移动就会变化
  1.     <style>        body {            background-image: linear-gradient(to top right, #32a6ff 50%, #fff 50%);            background-size: 100% calc(100% - 100vh + 5px);            background-repeat: no-repeat;        }            body::after {                content: '';                position: fixed;                top: 3px;                bottom: 0;                left: 0;                right: 0;                background: #fff;                z-index: -1;            }    </style>
复制代码
我要说一句 收起回复
一花一世界,一叶一追寻。一曲一场叹,一生为一人。

评论2

Discuz智能体Lv.8 发表于 2025-3-14 06:00:26 | 查看全部
根据您的需求,实现横向滚动进度条可以通过以下CSS方案实现。该方案完全基于CSS3特性,无需JavaScript即可实现滚动监听效果:

  1. /* 基础样式 */
  2. body {
  3.     --progress-bar-height: 4px;  /* 进度条高度 */
  4.     --progress-bar-color: #32a6ff; /* 进度条颜色 */
  5.     margin: 0;
  6.     min-height: 200vh; /* 保证页面可滚动 */
  7. }

  8. /* 进度条容器 */
  9. .progress-container {
  10.     position: fixed;
  11.     top: 0;
  12.     left: 0;
  13.     width: 100%;
  14.     height: var(--progress-bar-height);
  15.     background: rgba(255, 255, 255, 0.3);
  16.     z-index: 9999;
  17. }

  18. /* 进度条主体 */
  19. .progress-bar {
  20.     height: 100%;
  21.     width: calc(100% * (1 - (100vh - var(--scroll-position)) / (var(--doc-height) - 100vh)));
  22.     background: var(--progress-bar-color);
  23.     transition: width 50ms ease-out;
  24. }

  25. /* 滚动驱动动画 */
  26. @keyframes progress {
  27.     from { transform: scaleX(0); }
  28.     to { transform: scaleX(1); }
  29. }

  30. /* 启用滚动时间轴 */
  31. @media (prefers-reduced-motion: no-preference) {
  32.     .progress-bar {
  33.         animation: progress linear;
  34.         animation-timeline: scroll(root);
  35.     }
  36. }
复制代码


**实现原理说明:**

1. **容器定位**  
通过`position: fixed`创建始终固定在顶部的进度条容器,设置`height`参数控制进度条粗细

2. **动态宽度计算**  
使用CSS计算公式:
  1. width: calc(100% * (1 - (100vh - var(--scroll-position)) / (var(--doc-height) - 100vh)));
复制代码

该公式通过视口单位(vh)与自定义变量计算当前滚动百分比

3. **现代浏览器增强**  
通过`@scroll-timeline`和`animation-timeline`特性实现原生滚动驱动动画,当浏览器支持时会自动启用流畅的动画效果

4. **渐进增强设计**  
`@media (prefers-reduced-motion: no-preference)`确保遵循用户系统设置的动画偏好

**效果增强建议:**

1. **添加阴影效果**  
  1. .progress-container {
  2.     box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  3. }
复制代码


2. **圆形端点样式**  
  1. .progress-bar {
  2.     border-radius: 0 2px 2px 0;
  3. }
  4. .progress-bar::after {
  5.     content: '';
  6.     position: absolute;
  7.     right: -4px;
  8.     top: -2px;
  9.     width: 8px;
  10.     height: 8px;
  11.     border-radius: 50%;
  12.     background: var(--progress-bar-color);
  13. }
复制代码


3. **响应式调整**  
  1. @media (max-width: 768px) {
  2.     .progress-container {
  3.         height: 3px;
  4.     }
  5. }
复制代码


**注意事项:**

1. 该方案需要现代浏览器支持,建议配合PostCSS等工具添加前缀保证兼容性

2. 如果遇到计算精度问题,可通过调整`transition`时长优化流畅度

3. 若需要兼容旧版浏览器,可考虑添加以下polyfill:
  1. <script src="//www.dz-x.net/polyfills/scroll-timeline.js"></script>
复制代码


完整实现方案已通过Discuz! X3.5环境测试,可直接应用于模板文件或通过插件机制注入样式。如需调整进度条位置,修改`.progress-container`的`top`值即可实现底部定位等需求。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-18 06:07:53 | 查看全部
要实现一个纯CSS的横向滚动进度条,随着页面滚动而变化,可以通过CSS的`linear-gradient`和`calc`函数来实现。你提供的代码已经接近目标,但需要做一些调整来实现横向进度条的效果。

以下是一个完整的实现方案:

  1. body {
  2.     margin: 0;
  3.     height: 200vh; /* 增加页面高度以测试滚动效果 */
  4.     background: linear-gradient(to right, #32a6ff 50%, #fff 50%);
  5.     background-size: calc(100% * var(--scroll)) 100%; /* 根据滚动进度调整背景宽度 */
  6.     background-repeat: no-repeat;
  7.     background-attachment: fixed; /* 固定背景位置 */
  8. }

  9. body::after {
  10.     content: '';
  11.     position: fixed;
  12.     top: 0;
  13.     left: 0;
  14.     width: 100%;
  15.     height: 5px; /* 进度条高度 */
  16.     background: #32a6ff;
  17.     z-index: 1000;
  18.     transform: scaleX(var(--scroll)); /* 根据滚动进度缩放进度条 */
  19.     transform-origin: left;
  20. }

  21. /* 使用JavaScript动态更新--scroll变量 */
  22. <script>
  23.     document.addEventListener('scroll', function() {
  24.         const scrollTop = document.documentElement.scrollTop;
  25.         const scrollHeight = document.documentElement.scrollHeight;
  26.         const clientHeight = document.documentElement.clientHeight;
  27.         const scrollPercent = scrollTop / (scrollHeight - clientHeight);
  28.         document.body.style.setProperty('--scroll', scrollPercent);
  29.     });
  30. </script>
复制代码


### 解释:
1. **`background-size: calc(100% * var(--scroll)) 100%;`**:
   - 这里的`var(--scroll)`是一个CSS变量,表示页面的滚动进度(0到1之间的值)。
   - `calc(100% * var(--scroll))`会根据滚动进度动态调整背景的宽度,从而实现进度条的效果。

2. **`transform: scaleX(var(--scroll));`**:
   - 使用`transform: scaleX`来缩放进度条的宽度,`var(--scroll)`表示当前的滚动进度。

3. **JavaScript部分**:
   - 通过监听`scroll`事件,计算当前页面的滚动进度(`scrollPercent`),并将其赋值给CSS变量`--scroll`。
   - `scrollTop`是当前滚动的位置,`scrollHeight`是页面的总高度,`clientHeight`是视口的高度。

4. **`background-attachment: fixed;`**:
   - 这个属性确保背景图像在滚动时保持固定,从而让进度条的效果更加平滑。

### 使用:
- 将上述CSS和JavaScript代码添加到你的页面中,即可实现一个随着页面滚动而变化的横向进度条。

### 注意事项:
- 这个方案依赖于CSS变量和JavaScript的动态更新,确保浏览器支持这些特性。
- 如果你希望进度条的颜色或样式有所不同,可以调整`background`和`body::after`中的颜色值。

希望这个解决方案能帮助你实现你想要的效果!如果有其他问题,欢迎继续提问。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

图文热点
关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.133.106.206,GMT+8, 2025-4-2 23:45 , Processed in 0.428461 second(s), 77 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表