⚡某东标题栏背景色渐变动画:颜色随着页面滚动渐变

839 阅读2分钟

前言

这篇又是熟悉的某东APP的UI动画~~~

今天设计小姐姐需要实现的是我的页面顶部标题栏背景色,随着滚动颜色渐变。

大致效果:

页面标题栏默认只有两个图标

用户向上滚动页面时,标题栏始终固定在顶部,并逐渐出现白色的背景

用户向下滚动页面时,白色的背景逐渐消失

我第一反应本来是想拒绝的,但是我本身对这个功能实现也挺好奇。

于是,有了这篇文章的诞生。

image.png

正文开始

真机效果

out2.gif

技术栈

Uniapp + Taliwind CSS

因为之前有做过类似滚动的场景,所以上来就戳了一个下面的代码

H5端示例代码

 <view
  class="sticky top-0 z-200"
  :style="`backgroundColor:${headerBoxBg}`">
  自定义内容
</view>
data(){
    return{
        headerBoxBg: ''
    }
},
onShow(){
    document.addEventListener('scroll', this.handleScroll)
},
onHide() {
    document.removeEventListener('scroll', this.handleScroll)
},
methods:{
    handleScroll() {
        const scrollTop =
          window.pageYOffset || document.documentElement.scrollTop
        const distanceThreshold = 30 // 滚动距离阈值,用于控制背景色变化的临界点

        if (scrollTop < distanceThreshold) {
          // 计算透明度
          const opacity = scrollTop / distanceThreshold
          this.headerBoxBg = `rgba(255, 255, 255, ${opacity})`
        } else {
          // 达到阈值后设置纯白背景
          this.headerBoxBg = '#ffffff'
        }
    }
}
      

因为笔者都是在浏览器中进行版本开发,代码写完后,H5端测试正常。

然后,git提交代码,分支合并到test,代码发布到测试环境,动作一气呵成,一套流程可谓是行云流水啦。

然后...

测试给我提了个bug,app中页面滚动顶部标题栏没有白色渐变背景~~~

image.png

当时我就纳闷了,我第一反应是style没生效? 于是我翻了下uniapp的style写法,难道必须是对象写法吗?

于是改成了下面这样

<view class="sticky top-0 z-200" :style="{ background: headerBoxBg }">
   若干东西
</view>

不出意料,手机app端调试,标题栏依旧没有样式。

想了若干分钟,猜测可能是监听的部分出问题了,然后搜官方文档,搜到了下面两张图

image.png

image.png

实锤了,家人们,犯了个低级错误啊啊啊~~~

uniapp app端不支持 windowsdocument, 这些是浏览器环境提供的对象,方便用户进行dom操作的。感兴趣的小伙伴可以去我这篇文章看看图解。

浅谈项目中怎么优雅使用websocket和它的兄弟萌

事已至此,上面H5代码示例中页面的滚动距离和页面滚动监听,写法是不对的,不能适用于APP端。咋办呢 这不是白忙了吗?然后我就找到了这个onPageScroll生命周期...

uniapp提供了监听页面滚动的生命周期钩子啊啊啊,让我在那搞半天...

适配H5端和APP端示例代码

示例代码如下,就这样简简单单的实现了设计小姐姐的需求,可以同时支持H5端和APP端

 onPageScroll(e) {
      console.log('滚动距离:', e.scrollTop)
      this.handleScroll(e.scrollTop)
 },
 methods:{
     handleScroll(scrollTop) {
        const distanceThreshold = 20 // 滚动距离阈值,用于控制背景色变化的临界点

        if (scrollTop < distanceThreshold) {
          // 计算透明度
          const opacity = scrollTop / distanceThreshold
          this.headerBoxBg = `rgba(255, 255, 255, ${opacity})`
        } else {
          // 达到阈值后设置纯白背景
          this.headerBoxBg = '#ffffff'
        }
        console.log(this.headerBoxBg)
    },
 }

总结

本文主要介绍了H5端的标题栏背景色随着滚动颜色渐变的UI动画。

Uniapp中适配H5端APP端的上述UI动画。

细节一般是被忽略的,但是成长也是从抓住细节开始。

这篇文章的来源就是死扣细节,然后不断破案,学习总结出来的。

完结

这篇文章我尽力把我的笔记和想法放到这了,希望对小伙伴有帮助。

欢迎转载,但请注明来源。

最后,希望小伙伴们给我个免费的点赞,祝大家心想事成,平安喜乐。

image.png