vue3uniapp实现自定义拱形底部导航栏,解决首次闪烁问题

前言:

        我最初在网上翻阅查找了很多方法,发现大家都是说在page.json中tabbar中添加:"custom": true,即可解决首次闪烁的问题,可是添加了我这边还是会闪烁,因此我这边改变了思路,使用了虚拟页面来解决此问题。

效果图:

一:编写

       1. 在page.json中写一个初始页面,pages中的第一个对象是默认展示第一个页面,所以一定要在写一个。

  "pages": [
        {
            "name": "index",
            "path": "pages/index/index",
            "style":{
                "navigationStyle":"custom"
            }
        },

        2.新建index文件

        3.编写index文件,因为我有三个页面,底部会有三个选项,每一个组件对应一个页面,Tabbr是我自定义的底部导航栏

    <view>
        <view>
            <view v-if="pageStatus[0]" class="page__container" :style="pageContainerStyle(0)">
                <scroll-view class="scroll-view" scroll-y>
                    <BasicPage />
                </scroll-view>
            </view>
            <view v-if="pageStatus[1]" class="page__container" :style="pageContainerStyle(1)">
                <scroll-view class="scroll-view" scroll-y>
                    <InquiriesPage />
                </scroll-view>
            </view>
            <view v-if="pageStatus[2]" class="page__container" :style="pageContainerStyle(2)">
                <scroll-view class="scroll-view" scroll-y>
  
### 如何在 UniApp 中创建自定义底部 TabBar 导航栏 #### 创建项目结构 为了实现自定义底部导航栏,在项目的 `components` 文件夹下新建一个名为 `tabbar` 的组件文件夹,并在其内部创建 `tabbar.vue` 组件文件[^1]。 ```vue <!-- components/tabbar/tabbar.vue --> <template> <view class="tab-bar"> <!-- 这里放置各个 tab-item --> </view> </template> <script> export default { name: &#39;CustomTabBar&#39;, } </script> <style scoped> .tab-bar { /* 自定义样式 */ } </style> ``` #### 注册全局组件 编辑入口文件 `main.js` 来注册这个新创建的自定义 TabBar 组件,以便可以在整个应用中使用它[^2]: ```javascript // main.js import CustomTabBar from &#39;@/components/tabbar/tabbar.vue&#39; Vue.component(&#39;custom-tab-bar&#39;, CustomTabBar); ``` #### 配置页面属性 对于希望显示此自定义 TabBar 的页面,在其对应的 `.json` 页面配置文件内设置 `"usingComponents"` 字段来引入该组件。同时也要确保这些页面被加入到 manifest.json 中作为 tabBar 页面之一。 ```json { "path": "pages/index/index", "style": { "navigationBarTitleText": "首页" }, "usingComponents": { "custom-tab-bar": "/components/tabbar/tabbar" } } ``` #### 定义具体行为逻辑与UI设计 回到之前建立的 `tabbar.vue` 文件,完善模板部分以展示实际的标签按钮及其交互效果;编写相应的脚本处理点击事件切换不同页面的功能;最后通过 CSS 或者 Less/Sass 对外观做进一步美化调整。 ```vue <!-- components/tabbar/tabbar.vue --> <template> <view class="tab-bar"> <navigator url="/pages/home/home" open-type="switchTab" hover-class="none"> <image :src="current === &#39;/pages/home/home&#39; ? selectedHomeIconPath : homeIconPath"></image> <text>首页</text> </navigator> <!-- 更多 tab-items... --> </view> </template> <script> export default { data() { return { current: &#39;&#39;, // 当前激活路径 homeIconPath: &#39;/static/images/home.png&#39;, selectedHomeIconPath: &#39;/static/images/selected-home.png&#39; // 其他 icon 路径... }; }, onLoad(options){ this.current = getCurrentPages().pop().route; } }; </script> <style lang="scss" scoped> /* 添加一些基本样式 */ .tab-bar { display: flex; justify-content: space-around; align-items: center; navigator { text-align: center; image { width: 40rpx; height: 40rpx; } } } </style> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值