uni-app 实现小程序导航栏默认隐藏 上滑到一定高度后显示

发布于 1周前 作者 caililin 来自 Uni-App

uni-app 实现小程序导航栏默认隐藏 上滑到一定高度后显示

插件需求# 小程序导航栏默认无,页面上滑到一定高度导航栏显示出来。

请问大佬们,此功能要如何实现?

开发环境 版本号 项目创建方式
5 回复

利用吸顶效果,设置吸顶组件最小高度1rpx,吸顶内容用v-if隐藏,当触发吸顶的时候用v-if打开导航栏就行了,我这里是用了uView框架的示例代码:

<u-sticky :enable=“stickyEnable” @fixed=“routeFixed” @unfixed=“routeUnfixed” :offset-top=“stickyTopRpx”>

<view class="sticky-site ccl-white-bgcolor"> <view v-if="stickyShow" class="u-flex"> <view class="item u-flex-1 u-p-t-16 u-p-b-16 u-p-l-24 u-p-r-24" class="{'u-border-left': index>0,'blue-col': index == routeIndex}" v-for="(item,index) in routeList" :key="index" [@click](/user/click)="routeToggle(index)"> <view class="u-flex u-row-between u-col-bottom"> <view class="u-font-30 ccl-font-bold">{{item.lineOrder}} 线路</view> <view class="u-font-20">¥{{item.marketPrice}}/人</view> </view> <view class="u-font-20 u-line-1">{{item.subName}}</view> </view> </view> </view> </u-sticky> //吸顶事件 routeFixed() { this.stickyShow = true }

uView 有这个组件嘛? 在哪里我没找到

回复 8***@qq.com: https://v1.uviewui.com/components/sticky.html 你给导航栏设置position: sticky属性也行

在uni-app中实现小程序导航栏默认隐藏,并在用户上滑到一定高度后显示,可以通过以下步骤实现。这主要涉及到对页面滚动事件的监听以及动态修改页面的样式。以下是一个简单的代码示例,展示了如何实现这一功能。

首先,确保你的pages.json配置文件中对应页面的navigationStyle设置为custom,这样你就可以自定义导航栏。

// pages.json
{
  "pages": [
    {
      "path": "pages/index/index",
      "style": {
        "navigationStyle": "custom"
      }
    }
  ]
}

然后,在你的页面文件(例如pages/index/index.vue)中,实现以下逻辑:

<template>
  <view class="container">
    <!-- 自定义导航栏 -->
    <view v-if="!isNavBarVisible" class="custom-nav-bar">
      <!-- 导航栏内容,如标题、返回按钮等 -->
      <text>自定义导航栏</text>
    </view>
    
    <!-- 页面内容 -->
    <scroll-view @scroll="onScroll" scroll-y="true" class="content">
      <!-- 内容部分 -->
      <view v-for="n in 100" :key="n" class="item">Item {{ n }}</view>
    </scroll-view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      isNavBarVisible: false, // 导航栏显示状态
      navBarScrollThreshold: 100, // 触发显示导航栏的滚动高度阈值
    };
  },
  methods: {
    onScroll(event) {
      const scrollTop = event.detail.scrollTop;
      this.isNavBarVisible = scrollTop > this.navBarScrollThreshold;
    },
  },
};
</script>

<style>
.container {
  padding-top: 0; /* 根据自定义导航栏高度调整 */
}

.custom-nav-bar {
  width: 100%;
  height: 44px; /* 自定义导航栏高度 */
  background-color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  position: fixed;
  top: 0;
  left: 0;
  z-index: 1000; /* 确保导航栏在最上层 */
}

.content {
  padding-top: 44px; /* 根据自定义导航栏高度调整,避免内容被遮挡 */
}

.item {
  height: 50px;
  border-bottom: 1px solid #ccc;
  display: flex;
  align-items: center;
  justify-content: center;
}
</style>

在这个示例中,我们使用了scroll-view组件来监听页面的滚动事件,并根据滚动的距离scrollTop来决定是否显示自定义的导航栏。通过动态修改isNavBarVisible的值,我们可以控制导航栏的显示与隐藏。同时,通过调整.container.contentpadding-top属性,我们可以确保页面内容不会被自定义导航栏遮挡。

回到顶部