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

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

相关推荐
雪芽蓝域zzs36 分钟前
从零搭建【pnpm+Vue3+TS+Setup+VueRouter4+Pinia+Axios+ElementPlus (unplugin 按需)】仿若依后台
前端·vue.js
燕落南枝43 分钟前
HTML 列表标签详解:有序列表、无序列表与描述列表
前端·html
派小心.1 小时前
DAU和MAU怎么计算?先确定活跃事件、用户键和统计窗口
大数据·服务器·前端·人工智能·数据分析
代码猎人1 小时前
前端怎么配合后端完成bug修复
前端
叫我铁汁儿吧1 小时前
JS作用域
前端·面试
定栓1 小时前
Webpack迁到Vite第七节(四):全家桶移除 — 保留项、脚本与数据收尾
前端·webpack·node.js
VimorphTech1 小时前
React 任务轮询,为什么不能只写一个 setInterval?
javascript·typescript
代码猎人1 小时前
前端怎么优化首屏加载速度
前端
代码猎人1 小时前
前端怎么保障项目稳定上线与运行
前端
数据掘金1 小时前
小程序埋点方案的埋点文档怎么自动生成?
前端