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>
    }
    

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

相关推荐
kyriewen1 小时前
产品经理把PRD写成“天书”,我用AI半小时重写了一遍,他当场愣住
前端·ai编程·cursor
humcomm2 小时前
元框架的工作原理详解
前端·前端框架
canonical_entropy2 小时前
Attractor Before Harness: AI 大规模开发的方法论
前端·aigc·ai编程
zhangxingchao2 小时前
多 Agent 架构到底怎么选?从 Claude Agent Teams、Cognition/Devin 到工程落地原则
前端·人工智能·后端
IT_陈寒3 小时前
SpringBoot那个自动配置的坑,害我排查到凌晨三点
前端·人工智能·后端
Honor丶Onlyou3 小时前
VS Code 右键菜单修复记录
前端
卡卡军3 小时前
agmd 1.0 重磅升级——Rust 重写,性能起飞
javascript·rust
PILIPALAPENG3 小时前
Python 语法速成指南:前端开发者视角(JS 类比版)
前端·人工智能·python
Larcher3 小时前
🔥 告别抓瞎:用 Claude Code (cc) 优雅接手与维护已有项目
javascript·机器学习·前端框架
JYeontu3 小时前
轮播图不够惊艳?试下这个立体卡片轮播图
前端·javascript·css