uniapp 如何实现下滑隐藏上滑显示效果
在uniapp中想要实现类似头条、抖音那样的滑动隐藏效果:页面下滑时顶部导航栏隐藏,上滑时又显示出来。请问应该如何实现这个功能?目前尝试了scroll-view的@scroll事件监听滚动方向,但隐藏和显示的动画效果不太流畅。有没有成熟的解决方案或者组件推荐?最好能提供具体代码示例。
2 回复
在uniapp中想要实现类似头条、抖音那样的滑动隐藏效果:页面下滑时顶部导航栏隐藏,上滑时又显示出来。请问应该如何实现这个功能?目前尝试了scroll-view的@scroll事件监听滚动方向,但隐藏和显示的动画效果不太流畅。有没有成熟的解决方案或者组件推荐?最好能提供具体代码示例。
使用 onPageScroll 监听页面滚动,通过计算滚动距离控制元素显示/隐藏。示例代码:
data() {
return { showHeader: true, lastScrollTop: 0 }
},
onPageScroll(e) {
const current = e.scrollTop
this.showHeader = current < this.lastScrollTop
this.lastScrollTop = current
}
模板中用 v-show="showHeader" 控制元素显隐。
在 UniApp 中,可以通过监听页面滚动事件,结合 CSS 动画实现下滑隐藏、上滑显示的效果(例如导航栏或标题栏)。以下是实现步骤及示例代码:
onPageScroll 监听页面滚动。<template>
<view>
<!-- 需要隐藏/显示的元素,例如导航栏 -->
<view class="header" :class="{ 'header-hidden': isHidden }">
我是顶部导航栏
</view>
<!-- 页面内容 -->
<view class="content">
<!-- 这里放长列表或其他内容,确保可以滚动 -->
<view v-for="item in 100" :key="item">列表项 {{ item }}</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
isHidden: false, // 控制隐藏状态
lastScrollTop: 0, // 上一次滚动位置
};
},
onPageScroll(e) {
const scrollTop = e.scrollTop;
// 判断滚动方向:向下滚动隐藏,向上滚动显示
if (scrollTop > this.lastScrollTop && scrollTop > 50) {
// 向下滚动且超过阈值时隐藏
this.isHidden = true;
} else {
// 向上滚动时显示
this.isHidden = false;
}
// 更新上一次滚动位置
this.lastScrollTop = scrollTop;
},
};
</script>
<style>
.header {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100rpx;
background-color: #007AFF;
color: white;
display: flex;
align-items: center;
justify-content: center;
transition: transform 0.3s ease; /* 添加过渡动画 */
z-index: 999;
}
.header-hidden {
transform: translateY(-100%); /* 向上隐藏 */
}
.content {
margin-top: 100rpx; /* 避免内容被固定头部遮挡 */
padding: 20rpx;
}
</style>
onPageScroll:UniApp 页面生命周期函数,监听滚动事件。scrollTop 和上一次值确定方向。transform: translateY 结合 transition 实现平滑隐藏/显示效果。scrollTop > 50 避免轻微滚动误触发。transition 时间或使用 transform 替代 top 属性以获得更好性能。以上代码在 UniApp 中测试有效,适用于导航栏、标题栏等元素的动态显示控制。
