微信小程序滑动控制自定义标题显隐操作

需求:别人首页有的,我们也要!

初始化隐藏标题、下滑 100rpx 显示、上滑回顶部隐藏

1.设置不使用系统标题,json配置...
2.首页html配置

3.首页js配置


onPageScroll:是小程序框架【内置的滚动监听方法】,框架会自动监听页面滚动并触发该方法;

执行特点:滚动过程中高频触发,入参包含滚动距离 scrollTop;
4.wxml样式配置,见下面完整代码...

完整代码

HTML

bash 复制代码
<!-- 自定义【显隐】标题:白色背景占满整行 -->
<view class="custom-nav-bar" style="opacity: {{navOpacity}};">
  <view class="nav-title-wrap" style="top: {{menuCenterY}}rpx;">
    <text class="nav-title">首页</text>
  </view>
</view>

<!-- 主要内容 -->
<view class="page-content">
	<!-- 你原有的首页内容... -->

</view>

JS

bash 复制代码
		// ========== 【新增属性】标题栏核心数据 ==========
		navOpacity: 0, // 导航栏透明度(控制显隐)
		scrollThreshold: 100, // 下滑100rpx触发显示
		menuCenterX: 0, // 胶囊中心X坐标(rpx)
		menuCenterY: 0, // 胶囊中心Y坐标(rpx)
		
    //=================【onload方法执行...】
		// 第一步:优先计算胶囊中心坐标
		this.calcMenuCenter();
		// 第二步:初始化标题隐藏
		this.setData({
			titleOpacity: 0,
			titleHeight: 0
		})
		//======================【核心2个方法】========
		
	// 核心:计算胶囊的水平+垂直中心坐标(rpx)
	calcMenuCenter() {
		// 1. 获取系统信息和胶囊原始坐标(px)
		const systemInfo = wx.getSystemInfoSync();
		const menu = wx.getMenuButtonBoundingClientRect();
		const px2rpx = 750 / systemInfo.screenWidth; // px转rpx比例

		// 2. 计算胶囊中心坐标(px → rpx)
		// 水平中心:胶囊左坐标 + 胶囊宽度/2
		const menuCenterX_px = menu.left + menu.width / 2;
		// 垂直中心:胶囊上坐标 + 胶囊高度/2
		const menuCenterY_px = menu.top + menu.height / 2;

		// 3. 转换为rpx并赋值(标题将基于此坐标居中)
		this.setData({
			menuCenterX: menuCenterX_px * px2rpx,
			menuCenterY: menuCenterY_px * px2rpx
		});

		// 调试日志(可删除,用于验证坐标)
		console.log('胶囊中心坐标(rpx):', {
			x: this.data.menuCenterX,
			y: this.data.menuCenterY
		});
	},

	// 滚动监听:仅控制导航栏透明度(高度固定,不影响对齐)
	onPageScroll(e) {
		const systemInfo = wx.getSystemInfoSync();
		const px2rpx = 750 / systemInfo.screenWidth;
		// 滚动距离(rpx),容错:最小为0
		const scrollTopRpx = Math.max(e.scrollTop * px2rpx, 0);

		// 计算透明度:0→1(下滑≥100rpx则完全显示)
		let navOpacity = 0;
		if (scrollTopRpx >= this.data.scrollThreshold) {
			navOpacity = 1;
		} else if (scrollTopRpx > 0) {
			navOpacity = scrollTopRpx / this.data.scrollThreshold;
		}

		// 仅更新透明度,对齐坐标不变
		this.setData({
			navOpacity
		});
	},

WXML

bash 复制代码
/* ========== 【新增】标题栏核心样式 ========== */
page {
  margin: 0;
  padding: 0;
  background-color: #f5f5f5;
  padding-top: 88rpx; /* 预留导航栏高度 */
}

/* 导航栏容器:固定顶部,高度覆盖胶囊区域 */
.custom-nav-bar {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 88rpx; /* 微信默认导航栏高度 */
  background-color: #fff; /* 导航栏背景占满整行(关键) */
  box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.05);
  z-index: 999;
  transition: opacity 0.3s ease;
}

/* 标题容器:占满导航栏宽度,垂直对齐胶囊 */
.nav-title-wrap {
  position: absolute;
  left: 0;
  width: 100%; /* 占满整行宽度 */
  height: 100%; /* 占满导航栏高度 */
  transform: translateY(-50%); /* 垂直对齐胶囊 */
  background-color: #fff; /* 白色背景占满整行 */
}

/* 标题文字:水平居中 + 垂直居中 */
.nav-title {
  display: block;
  text-align: center; /* 水平居中 */
  line-height: 88rpx; /* 垂直居中(和导航栏高度一致) */
  font-size: 32rpx;
  font-weight: 600;
  color: #333;
}

/* 可选:测试内容样式 */
.page-content {
  /* padding: 0 30rpx; */
}
.item {
  height: 100rpx;
  line-height: 100rpx;
  border-bottom: 1rpx solid #eee;
  margin-bottom: 10rpx;
  font-size: 28rpx;
}
相关推荐
CHU72903514 分钟前
随时随地学新知——线上网课教学小程序前端功能详解
前端·小程序
职豚求职小程序1 小时前
京东26春招笔试题库宝藏小程序刷题yyds!
小程序
游戏开发爱好者81 小时前
如何使用Instruments和Keymob进行Swift应用性能优化分析
开发语言·ios·性能优化·小程序·uni-app·iphone·swift
2501_916008892 小时前
移动应用上架到应用商店的完整指南:原理与详细步骤
android·ios·小程序·https·uni-app·iphone·webview
云起SAAS2 小时前
素材库微商品牌产品花店图文视频素材库抖音快手微信小程序看广告流量主开源
微信小程序·小程序·ai编程·看广告变现轻·素材库微商品牌产品花店图文视频
源码ym7k资源2 小时前
家政服务小程序维修保洁美容美甲上门预约派单技师saas全开源app+h5+小程序-源码ym7K
小程序
2601_952013762 小时前
新麦同城到家预约上门服务系统小程序SAAS账号
小程序
源码ym7k资源3 小时前
2024仿东郊微端家政预约上门小程序【亲测可用】家政管理系统抢单派单开源源码 -源码开发
小程序
黑客老李4 小时前
记一次edu证书站小程序漏洞挖掘
小程序·黑客入门·渗透测试实战
ok_hahaha15 小时前
java从头开始-苍穹外卖-day06-微信小程序开发-微信登录和商品浏览
java·微信·微信小程序·小程序