鱼C论坛

 找回密码
 立即注册
查看: 1623|回复: 2

[奇技淫巧] 纯手写优美滚动条|【秀技】

[复制链接]
发表于 2019-1-11 17:50:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

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

x
本帖最后由 不二如是 于 2020-3-17 19:00 编辑


                               
登录/注册后可看大图


今天实现的最终效果,如上图所示,不难但实现效果很精致。

顶部的滚动进度条,随着页面的滚动进度而长短变化。

在开始阅读之前,请鱼油缓一缓,思考下(欢迎下方留言):
纯手动或者用 JS 如何实现?


嗯........

假设鱼油思考完毕。

640.png


是不是想到页面监听然后动态算比例?

或者计算页面滚动距离,然后画滚动条?

其实不用那么复杂啦,纯用 CSS 就好了

WechatIMG147.png


意淫一下,等学了《零基础入门学习Web开发》(HTML5 & CSS3)这个系列你也会这么厉害。

目前,可以先尝鲜练练手。

如果想只用 CSS 实现,只能另辟蹊径,使用一些“障眼法”

好,下面就借助一些奇技淫巧,使用 CSS 一步一步完成这个效果。

分析一下难点
如何得知用户当前滚动页面的距离并且通知顶部进度条?


正常分析应该是这样的,但是这就陷入了一个尴尬的处境。

进度条就只是进度条,接收页面滚动距离,改变宽度。

如果页面滚动和进度条是一个整体呢?




手把手环节

好了,不瞎得瑟了,运用线性渐变就可以。

关于线性渐变是什么,这里不做解释,自行参看:打造高质高的【按钮】

创建基本结构:
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <meta name="keywords" content="鱼C工作室|免费编程视频教学|Python教学|Web开发教学|全栈开发教学|C语言教学|汇编教学|Win32开发|加密与解密|Linux教学">
  7.     <meta name="description" content="鱼C工作室为大家提供最有趣的编程视频教学。">
  8.     <meta name="author" content="鱼C工作室">
  9.     <title>鱼C-进度条</title>
  10. </head>
  11. <body>
  12. <h1>鱼C-纯 CSS 进度条效果</h1>

  13. <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci aliquid, at consectetur dolorem ducimus error esse
  14.     ex expedita explicabo fuga fugit laborum maiores maxime nisi repudiandae sit ut! Ipsum, minus!</p>

  15. <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto illo iusto minima minus porro repellendus! Ad
  16.     earum eligendi, enim et maxime nam quia quos sit temporibus! Dolores iusto optio provident.</p>

  17. <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus assumenda aut consequuntur delectus maxime minus
  18.     molestiae necessitatibus omnis optio quia quis, ut velit vero? Ab adipisci deserunt dolorum ut voluptatibus!</p>

  19. <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci aliquid, at consectetur dolorem ducimus error esse
  20.     ex expedita explicabo fuga fugit laborum maiores maxime nisi repudiandae sit ut! Ipsum, minus!</p>

  21. <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto illo iusto minima minus porro repellendus! Ad
  22.     earum eligendi, enim et maxime nam quia quos sit temporibus! Dolores iusto optio provident.</p>

  23. <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus assumenda aut consequuntur delectus maxime minus
  24.     molestiae necessitatibus omnis optio quia quis, ut velit vero? Ab adipisci deserunt dolorum ut voluptatibus!</p>

  25. <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci aliquid, at consectetur dolorem ducimus error esse
  26.     ex expedita explicabo fuga fugit laborum maiores maxime nisi repudiandae sit ut! Ipsum, minus!</p>

  27. <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto illo iusto minima minus porro repellendus! Ad
  28.     earum eligendi, enim et maxime nam quia quos sit temporibus! Dolores iusto optio provident.</p>

  29. <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus assumenda aut consequuntur delectus maxime minus
  30.     molestiae necessitatibus omnis optio quia quis, ut velit vero? Ab adipisci deserunt dolorum ut voluptatibus!</p>

  31. <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci aliquid, at consectetur dolorem ducimus error esse
  32.     ex expedita explicabo fuga fugit laborum maiores maxime nisi repudiandae sit ut! Ipsum, minus!</p>

  33. <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto illo iusto minima minus porro repellendus! Ad
  34.     earum eligendi, enim et maxime nam quia quos sit temporibus! Dolores iusto optio provident.</p>

  35. <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus assumenda aut consequuntur delectus maxime minus
  36.     molestiae necessitatibus omnis optio quia quis, ut velit vero? Ab adipisci deserunt dolorum ut voluptatibus!</p>
  37. <ul>
  38.     <li>1.FishC</li>
  39.     <li>2.零基础入门学习scratch</li>
  40.     <li>2.零基础入门学习python</li>
  41.     <li>2.零基础入门学习web</li>
  42. </ul>

  43. <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. A ab aliquam asperiores consectetur consequatur doloribus,
  44.     fugit inventore iste, libero minus, repudiandae saepe sint. Doloremque dolorum eius odio quos repellendus totam?</p>

  45. <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquam assumenda aut commodi, earum enim ex excepturi
  46.     explicabo incidunt ipsum neque quaerat quasi quis! Dignissimos earum nisi non quam temporibus vero?</p>

  47. <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci architecto aut mollitia nemo. Dolore earum, ipsam
  48.     nemo neque nihil nobis omnis, quae quisquam quo repellendus rerum veniam voluptatem? Dolor, vero.</p>

  49. <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci aliquid, at consectetur dolorem ducimus error esse
  50.     ex expedita explicabo fuga fugit laborum maiores maxime nisi repudiandae sit ut! Ipsum, minus!</p>

  51. <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto illo iusto minima minus porro repellendus! Ad
  52.     earum eligendi, enim et maxime nam quia quos sit temporibus! Dolores iusto optio provident.</p>

  53. <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus assumenda aut consequuntur delectus maxime minus
  54.     molestiae necessitatibus omnis optio quia quis, ut velit vero? Ab adipisci deserunt dolorum ut voluptatibus!</p>

  55. <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci aliquid, at consectetur dolorem ducimus error esse
  56.     ex expedita explicabo fuga fugit laborum maiores maxime nisi repudiandae sit ut! Ipsum, minus!</p>

  57. <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto illo iusto minima minus porro repellendus! Ad
  58.     earum eligendi, enim et maxime nam quia quos sit temporibus! Dolores iusto optio provident.</p>

  59. <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus assumenda aut consequuntur delectus maxime minus
  60.     molestiae necessitatibus omnis optio quia quis, ut velit vero? Ab adipisci deserunt dolorum ut voluptatibus!</p>

  61. </body>
  62. </html>
复制代码


现在我们的基本页面结构就搞定了,全部包裹于 body 元素中。

当页面滚动,为 body 添加一个从左下到右上角的线性渐变:
  1. <style>
  2.         body {
  3.             background-image: linear-gradient(to right top, #2ebb96 50%, #eee 50%);
  4.             background-repeat: no-repeat;
  5.         }

  6.     </style>
复制代码


后面操作也都是 CSS 样式设置, 所以略去 style 元素不写了哈。

我们得到的效果:
Jan-21-2019 14-32-12.gif


不错哦,鱼C-元气绿(#2ebb96)的色块变化,其实很像一个整体变化的进度条了。

仔细观察最上面的效果,我们用另一个颜色把除了最上面的其他部分都遮盖起来,效果岂不就出来啦?!

怎么搞?

用伪类元素,把多出来的部分遮盖住。

还是不做详细介绍,自行参看:0 0 3 1 - 用伪类选择器让列表'嗑粉儿'

为 body 元素添加伪类:
  1. body::after {
  2.             content: "";
  3.             position: fixed;
  4.             top: 6px;
  5.             left: 0;
  6.             bottom: 0;
  7.             right: 0;
  8.             background: red;
  9.             z-index: -1;
  10.         }
复制代码


添加了一个距离上边界 6px 且置顶层的红色背景色:
Jan-21-2019 14-50-46.gif


上面的滚动条出来了吧?!

现在把背景色改为白色:
  1. background: #fff;
复制代码


效果就出来了:
Jan-21-2019 14-52-58.gif


眼尖的鱼油会发现,最后鼠标来回摆动的地方有一些小尴尬...

滑到底的时候,进度条并没有到底,怎么肥四呢?

是因为 body 的线性渐变高度设置了整个 body 的大小,需要控制背景图的大小。

CSS 中有一个 background-size 属性,这个属性可以帮助我们控制背景图大小,也就是渐变图的大小。

而对于 background-size 需要的是其 y 轴的值。

那问题又来了,y 轴的值怎么确定?

现在的视窗高度,就是 100vh,一个屏幕的高度。

background-size 的 y 可以通过:
  1. 100%-100vh
复制代码


要得到100% - 100vh的值还需要使用 CSS 中的 calc():
  1. body {
  2.             background-image: linear-gradient(to right top, #2ebb96 50%, #eee 50%);
  3.             background-repeat: no-repeat;
  4.             background-size: 100% calc(100% - 100vh + 6px);
  5.         }
复制代码


这里使用了 calc 进行了运算,减去了 100vh,也就是减去一个屏幕的高度。

这样渐变刚好在滑动到底部的时候与右上角贴合。

而 + 6px 则是滚动进度条的高度,预留出 6px 的高度。

再看看效果:
Jan-21-2019 15-03-11.gif


giphy.gif


搞定,收工?!

源码下载:
游客,如果您要查看本帖隐藏内容请回复






                               
登录/注册后可看大图


如果喜欢,别忘了评分


                               
登录/注册后可看大图


这位鱼油,如果喜欢本系列HTML帖子,请订阅 专辑&#9758;传送门)(不喜欢更要订阅

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
Amormo + 5 + 5 + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-22 22:30:48 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-16 13:56:27 | 显示全部楼层
DF
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 21:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表