mui实现底部凸起按钮的实现

最近在看其他app的时候,突然想到了在mui中自己实现一个底部凸起按钮的效果。
大致想要实现的样子如图(来自闲鱼app的主界面):

话说要怎么实现这个结构呢,对于使用过mui的朋友来说,底层都是h5+
webview页面搭建出整体的app的。

参考各路大神的文章和对webview的解读后,我们就可以知道利用官方例子的
上下导航来实现是无法做到的。这是由于几个问题

  1. webview页面无法做到特定形状的构建(这是废话...)

  2. 如果上下导航处于同一层级,下层的子页面只会遮挡住圆形按钮的多余部分,
    或是无法覆盖到圆形两侧而形成空白。


所以,对于这个问题我们将官方的例子的导航父页面拆开处理。
上边的导航栏用作构建底部切换状态栏和中间子页面的父页面。
而这样底部的切换就和要显示的子页面处于同一层级,我们就可以利用
h5+文档之中WebviewStyles

zindex: (Number 类型 ) 窗口的堆叠顺序值
拥有更高堆叠顺序的窗口总是会处于堆叠顺序较低的窗口的前面,拥有相同堆叠顺序的窗口后调用show方法则在前面。

来实现底部切换始终处于上层的效果。
剩下我们只需要解决页面的透明问题就可以了,利用文档之中WebviewStyles的参数。

background: (String 类型 )窗口的背景颜色
窗口空白区域的背景模式,设置background为颜色值(参考CSS Color
Names,可取值/十六进制值/rgb值/rgba值),窗口为独占模式显示(占整个屏幕区域);
设置background为“transparent”,则表示窗口背景透明,为非独占模式。

var bottom_style = {
                height: "83px",
                bottom: "0px",
                scrollIndicator: "none",
                background: "transparent",
                zindex: 998
                }

当然在这之后一定不要忘记给底部导航加上的body加上背景透明的css。

body {
      background: transparent;
     }

最后根据你的业务在底部切换的子页面处理逻辑并利用fire事件回传给父页面进行显示处理就大功告成了。

最后附上本人的圆形按钮代码和实现效果图。
css:

.circle {
                position: fixed;
                text-align: center;
                margin-left: calc((20% - 65px)/2);
                bottom: 18px;
                width: 65px;
                height: 65px;
                border-radius: 50px;
                background: rgba(100, 177, 245, 0.8);
                z-index: 99;
        }
.tab-center {
                display: table-cell;
                overflow: hidden;
                width: 1%;
                height: 50px;
                text-align: center;
                vertical-align: middle;
            }

html:

<div id="xxx.html" class="tab-center">
    <div class="circle">
        <span class="mui-icon-extra mui-icon-extra-sweep"></span>
    </div>
</div>

图片描述

如有问题,欢迎各路大神指正。

一部分思路参考了小青年的mui经典系列文章

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现 MUI 底部选项卡的跳转功能时,可以使用 `<BottomNavigation>` 和 `<BottomNavigationAction>` 组件来创建底部导航栏和选项卡。 首先,你需要导入相关的组件: ```jsx import React, { useState } from 'react'; import { BottomNavigation, BottomNavigationAction } from '@mui/material'; import { Home, Explore, Favorite } from '@mui/icons-material'; ``` 然后,你可以创建一个函数组件,并在组件中添加底部导航栏和选项卡的代码: ```jsx function BottomTabs() { const [value, setValue] = useState(0); // 用于保存当前选中的选项卡索引 const handleTabChange = (event, newValue) => { setValue(newValue); // 更新选中的选项卡索引 }; return ( <BottomNavigation value={value} onChange={handleTabChange}> <BottomNavigationAction label="Home" icon={<Home />} /> <BottomNavigationAction label="Explore" icon={<Explore />} /> <BottomNavigationAction label="Favorite" icon={<Favorite />} /> </BottomNavigation> ); } ``` 在上面的代码中,我们使用 `useState` 钩子来创建一个名为 `value` 的状态变量,用于保存当前选中的选项卡索引。`handleTabChange` 函数用于处理选项卡变动事件,并更新 `value` 的值。 最后,将 `BottomTabs` 组件添加到你的页面中即可: ```jsx function App() { return ( <div> {/* 其他内容 */} <BottomTabs /> </div> ); } ``` 这样,你就实现MUI 底部选项卡的跳转功能。当用户点击不同的选项卡时,会触发 `handleTabChange` 函数,并更新 `value` 的值,从而实现页面的跳转效果。你可以根据自己的需求,在每个选项卡的 `onClick` 事件中添加相应的跳转逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值