当前位置:首页 > 科技  > 软件

一篇带你学习 CSS 实现卷轴滚动效果

来源: 责编: 时间:2024-05-29 08:57:45 97观看
导读「庆余年2」 终于开播了~最近起点读书APP内上架了庆余年典藏书,最大的特色是里面新加入了全新的阅读皮肤,一个拟物化的卷轴滚动效果,效果如下:就是在拖动页面时,卷轴会随着页面的滚动而展开或卷起,就像在拖动真的画布一样,非

「庆余年2」 终于开播了~最近起点读书APP内上架了庆余年典藏书,最大的特色是里面新加入了全新的阅读皮肤,一个拟物化的卷轴滚动效果,效果如下:xmt28资讯网——每日最新资讯28at.com

图片xmt28资讯网——每日最新资讯28at.com

就是在拖动页面时,卷轴会随着页面的滚动而展开或卷起,就像在拖动真的画布一样,非常舒适,录屏可能看着不是很清晰,强烈建议去端内自行体验。xmt28资讯网——每日最新资讯28at.com

当时看到这个效果时就在思考,如何在 web 中也实现这样一个效果呢?xmt28资讯网——每日最新资讯28at.com

经过一番琢磨,发现仅使用 CSS 就能完成这样的效果。下面是我复刻的效果。xmt28资讯网——每日最新资讯28at.com

图片xmt28资讯网——每日最新资讯28at.com

这是如何实现呢?一起看看吧xmt28资讯网——每日最新资讯28at.com

一、CSS卷轴滚动的原理

首先 CSS 中并没有真正的 3d 滚动,立方体还可以勉强拼接,这种圆形的不行,因此我们需要用其他方式来实现。xmt28资讯网——每日最新资讯28at.com

这里其实是一个最简单的平移动画,只需要将纹理上下无缝平移,结合渐变和阴影,就能得到看似滚动的效果了。xmt28资讯网——每日最新资讯28at.com

先简单布局一下。xmt28资讯网——每日最新资讯28at.com

<div class="reel">  <div class="reel-bg"></div></div>

这里要用到卷轴的素材图片,是这样的。xmt28资讯网——每日最新资讯28at.com

这样就能得到卷轴的结构了。xmt28资讯网——每日最新资讯28at.com

效果如下:xmt28资讯网——每日最新资讯28at.com

xmt28资讯网——每日最新资讯28at.com

现在看着非常扁平,没有立体感,主要是纹理没有融入到背景之中。xmt28资讯网——每日最新资讯28at.com

如何将纹理完美的融合到后面的背景呢?没错,需要用到混合模式,这里用正片叠底就行了。xmt28资讯网——每日最新资讯28at.com

.reel-bg{  /**/  mix-blend-mode: multiply;}

效果就好很多了。xmt28资讯网——每日最新资讯28at.com

xmt28资讯网——每日最新资讯28at.com

最后给卷轴加点阴影,超出隐藏。xmt28资讯网——每日最新资讯28at.com

.reel{  /**/  overflow: hidden;  box-shadow: 0 5px 10px 5px rgba(0,0,0,.3), 0 10px 20px 10px rgba(0,0,0,.5);}

这样就比较真实了。xmt28资讯网——每日最新资讯28at.com

xmt28资讯网——每日最新资讯28at.com

滚动效果出来了,如何和页面滚动关联起来呢?接着往下看。xmt28资讯网——每日最新资讯28at.com

二、CSS滚动驱动动画

回到这里,先把整个布局完善一下。xmt28资讯网——每日最新资讯28at.com

<body>  <div class="reel">    <div class="reel-bg"></div>  </div>  <article>    <p>范慎很困难地撑着上眼皮,看着指头算自己这辈子做过些什么有意义的事情,结果右手五根瘦成筷子一样的指头还没有数完,他就叹了一口气,很伤心地放弃了这个工作。病房里的药水味总是这么刺鼻,旁边那床的老爷子前两天已经去地藏王菩萨那里报道了,大概再过几天就轮到自己吧。他得了某种怪病,重症肌无力,就是特别适合言情小说男主角的那种病。据说没得医,将来嗝屁的那天什么都动不了,只有眼泪可以流下来。痛!</p>    <p>范慎很困难地撑着上眼皮,看着指头算自己这辈子做过些什么有意义的事情,结果右手五根瘦成筷子一样的指头还没有数完,他就叹了一口气,很伤心地放弃了这个工作。病房里的药水味总是这么刺鼻,旁边那床的老爷子前两天已经去地藏王菩萨那里报道了,大概再过几天就轮到自己吧。他得了某种怪病,重症肌无力,就是特别适合言情小说男主角的那种病。据说没得医,将来嗝屁的那天什么都动不了,只有眼泪可以流下来。痛!</p>    <!--很多文本-->  </article></body>

简单修饰一下,由于卷轴要固定到顶部,可以采用sticky布局。xmt28资讯网——每日最新资讯28at.com

html{  background-color: #22312D;  font-family: cursive;}body{  margin: 0;}article{  background-color: #F5EBD4;  padding: 1em 0.5em;  border-left: 10px solid #405C53;  border-right: 10px solid #405C53;  margin: 0 15px;}p{  margin: 0;  padding: 0.2em 0;  color: #2C402E;  line-height: 150%;  text-indent: 2em;}h1{  text-align: center;  color: #F5EBD4;}

效果如下:xmt28资讯网——每日最新资讯28at.com

xmt28资讯网——每日最新资讯28at.com

不过这里还有点问题,由于是整个页面在滚动,内容滚到顶部会漏出来,如下:xmt28资讯网——每日最新资讯28at.com

xmt28资讯网——每日最新资讯28at.com

现在就让卷轴滚动和页面滚动联动起来, 非常简单,只需要添加animation-timeline属性就行了,设置滚动时间线为root,如下:xmt28资讯网——每日最新资讯28at.com

.reel-bg{  animation: scroll 1s linear forwards;  animation-timeline: scroll(root);}

这样在页面滚动时卷轴也跟着“转动”了。xmt28资讯网——每日最新资讯28at.com

xmt28资讯网——每日最新资讯28at.com

但看着卷轴转地是不是有点慢了?xmt28资讯网——每日最新资讯28at.com

确实是这样,这个时候表示页面从头滚到到底部,执行一次动画,也就是滚动一圈,所以页面内容越多,滚动距离越长,那么卷轴转的也就越慢。xmt28资讯网——每日最新资讯28at.com

下面来修复这个问题xmt28资讯网——每日最新资讯28at.com

三、优化卷轴滚动速度

简单来处理,可以给个合适的动画次数,比如:xmt28资讯网——每日最新资讯28at.com

.reel-bg{  animation: scroll 1s linear forwards 5;  animation-timeline: scroll(root);}

这样表示页面从头滚到到底部,会执行5次动画,也就是相当于会滚动5圈,所以看着速度就变快了。xmt28资讯网——每日最新资讯28at.com

xmt28资讯网——每日最新资讯28at.com

现在就舒服多了。xmt28资讯网——每日最新资讯28at.com

不过这种处理方式有个问题,动画次数是跟内容长度强相关的,如果在向下滚动时动态加载内容,就需要更新这个值,稍显麻烦。xmt28资讯网——每日最新资讯28at.com

那么,有没有办法让滚动速度保持均衡呢?也就是无论内容多少,速度都是一致的。xmt28资讯网——每日最新资讯28at.com

这就需要用到 CSS 动画范围区间了,也就是animation-range,简单来讲就是设置滚动区间。xmt28资讯网——每日最新资讯28at.com

图片xmt28资讯网——每日最新资讯28at.com

核心实现其实就这几行,是不是非常简单。xmt28资讯网——每日最新资讯28at.com

.reel-bg{  --s: 999999;  animation: scroll 1s linear forwards calc(var(--s)/184/3.14);  animation-timeline: scroll(root);  animation-range: 0 calc(var(--s) * 1px);}

四、不支持浏览器兼容

虽然 CSS 实现很简单,但是兼容性还不行,截至目前(2024年4月27日)仅支持Chrome 115+。xmt28资讯网——每日最新资讯28at.com

xmt28资讯网——每日最新资讯28at.com

你也可以访问以下链接查看真实效果。xmt28资讯网——每日最新资讯28at.com

  • CSS QYN book (juejin.cn)[1]
  • CSS QYN book (codepen.io)[2]

五、总结一下

以上就是本文的全部内容了,一个有趣的交互效果,你学到了吗,下面总结一下本文重点。xmt28资讯网——每日最新资讯28at.com

  • CSS卷轴滚动的原理其实是一个最简单的平移动画,只需要将纹理上下无缝平移,结合渐变和阴影,就能得到看似滚动的效果了。
  • 简单的平移动画看着非常扁平,没有立体感,主要是纹理没有融入到背景之中。
  • 利用混合模式正片叠底,可以让平移动画看着像滚动动画了。
  • CSS 滚动驱动动画可以让页面滚动和卷轴滚动联动起来。
  • 默认情况下,页面从头滚到到底部,执行一次动画,也就是滚动一圈,所以页面内容越多,滚动距离越长,卷轴转的也就越慢。
  • 可以通过改变动画重复次数来调整卷轴滚动速度,局限是需要根据页面滚动长度来计算合适的数值。
  • 用足够大的 CSS 动画范围区间(animation-range)配合动画重复次数可以实现卷轴滚动速度保持均衡。
  • 目前兼容性还有些差,可以用CSS.supports做兼容处理。

[1]CSS QYN book (juejin.cn): https://code.juejin.cn/pen/7362400098958966793。xmt28资讯网——每日最新资讯28at.com

[2]CSS QYN book (codepen.io): https://codepen.io/xboxyan/pen/VwNqEoE。xmt28资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-91369-0.html一篇带你学习 CSS 实现卷轴滚动效果

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Python虚拟环境的15个管理技巧

下一篇: 12306技术内幕,你知道吗?

标签:
  • 热门焦点
  • 6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月份有一个618,虽然这是京东周年庆的日子,但别的电商也都不约而同的跟进了,反正促销没坏处,厂商和用户都能满意。618期间一些产品也出现了历史低价,那么各个价位段的产品性价比
  • 微信语音大揭秘:为什么禁止转发?

    微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 虚拟键盘 API 的妙用

    虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 使用AIGC工具提升安全工作效率

    使用AIGC工具提升安全工作效率

    在日常工作中,安全人员可能会涉及各种各样的安全任务,包括但不限于:开发某些安全工具的插件,满足自己特定的安全需求;自定义github搜索工具,快速查找所需的安全资料、漏洞poc、exp
  • 慕岩炮轰抖音,百合网今何在?

    慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz&ldquo;难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?&rdquo;这一番话,出自百合网联合创
  • 拼多多APP上线本地生活入口,群雄逐鹿万亿市场

    拼多多APP上线本地生活入口,群雄逐鹿万亿市场

    Tech星球(微信ID:tech618)文 | 陈桥辉 Tech星球独家获悉,拼多多在其APP内上线了&ldquo;本地生活&rdquo;入口,位置较深,位于首页的&ldquo;充值中心&rdquo;内,目前主要售卖美食相关的
  • 猿辅导与新东方的两种“归途”

    猿辅导与新东方的两种“归途”

    作者|卓心月 出品|零态LT(ID:LingTai_LT)如何成为一家伟大企业?答案一定是对&ldquo;势&rdquo;的把握,这其中最关键的当属对企业战略的制定,且能够站在未来看现在,即使这其中的
  • 超闭合精工铰链 彻底消灭缝隙 三星Galaxy Z Flip5与Galaxy Z Fold5发布

    超闭合精工铰链 彻底消灭缝隙 三星Galaxy Z Flip5与Galaxy Z Fold5发布

    2023年7月26日,三星电子正式发布了Galaxy Z Flip5与Galaxy Z Fold5。三星新一代折叠屏手机采用超闭合精工铰链,让折叠后的缝隙不再可见。同时,配合处
  • 苹果140W USB-C充电器:采用氮化镓技术

    苹果140W USB-C充电器:采用氮化镓技术

    据10 月 30 日 9to5 Mac 消息报道,当苹果推出新的 MacBook Pro 2021 时,该公司还推出了新的 140W USB-C 充电器,附赠在 MacBook Pro 16 英寸机型的盒子里,也支
Top
Baidu
map