2024-4-12 页面标题栏适配背景色的交互优化

1.提出的需求点

昨日UI同事提了个需求点,就是希望用户在下滑页面的时候可以让标题栏的背景颜色以及文字适配页面顶部的背景色。

这个需求咋听起来就像app背景色适配手机壳颜色一样离谱,然后本人在生产环境其他页面体验了一下这个交互,效果非常不错,强迫症的福音。那么我们先往下构思一下思路。

2.现状分析与解决思路

看到下图所示,页面头部是一片深紫色区域,下半部分是一片白色区域。当页面是吸顶的时候标题栏是深紫色,当页面划过标题栏的时候标题栏依然是深紫色。

图1: 红色区域这块是深紫色,这个是正常的

图2: 当我们向下滑动的时候这块区域依然是紫色,看起来就很不协调,请问读者们怎么看?

总之我们要解决这个问题,先找找思路。一个简单思路就是,用户向下拉动的时候监听一下滚动元素的scrllTop,随着下拉页面scrollTop逐渐增大,标题栏背景的透明度逐渐降低。scrollTop超过头部紫色背景部分时标题栏变成全白背景。

3. 代码的简单实现

js 复制代码
    
    componentDidtMount(): void {
        //确保Dom渲染后再加上监听事件
        setTimeout(()=>{
            const pageDom=document.getElementById("page");
            this.listener=pageDom.addEventListener('scroll',this.updataTitleBg)
        })
    }
    
    //确保事件销毁后,监听事件也需要销毁
    componentWillUmmount(): void {
        clearInterval(this.listener);
    }
    
    private updataTitleBg():void=>{
        const headDom = document.getElementById("header");
        const pageDom = document.getElementById("page");
        if(pageDom.scrollTop<headDom.scrollHeight){
            //这里除去100是为了round取整用,取整后还需要除以100
            const opacityVal = Math.round((headDom.scrollHeight-pageDom.scrollTop)*100/headDom.scrollHeight)/100
            //修改顶部标题栏API
            setTitleBackgroundColor(`rgba(0,0,0,${opacityVal})`)
        }
    }
    
    render():React.ReactNode=>{
        <View id='page'>
            <View id='header'>{this.renderHeaderPart()}</View>
            <View>{this.renderBodyPart()}</View>
        </View>
    }
    

代码实现后的效果就如下图所示:

相关推荐
严肃小白兔24 分钟前
TanStack Router 更新构建工具链:Node.js 兼容性、路由分割与前端工程实践
前端·node.js·状态模式
IT_陈寒39 分钟前
Vue这个奇葩的响应式问题让我加班到凌晨
前端·人工智能·后端
风骏时光牛马1 小时前
功能可用性自动化测试验证
前端
LucianaiB11 小时前
【元宝搜索开发者征文大赛】AI时代,学得慢就不用学?用元宝搜索打造一个教程保质期,确保每一个教程符合你的现状
前端·人工智能·ai编程
excel11 小时前
JavaScript 对象池:减少高频对象创建与 GC 压力
前端
陈随易13 小时前
纯 Go 写的 JS 引擎,跑分超过了 C 语言的 QuickJS
前端·后端·程序员
子兮曰14 小时前
Chrome 权限元素实战:144 与 151 的渐进增强写法
前端·javascript·chrome
IT_陈寒14 小时前
Redis连接池泄漏那次,我差点把生产环境搞崩了
前端·人工智能·后端
强尼银手15 小时前
我花一天做了个格斗游戏原型,判定全对,然后被「美术」劝退了
前端·javascript
石小石Orz15 小时前
AI 正在蚕食我们的编码能力
前端·后端·算法