2025-08-16 14:39:34 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 获取系统信息对象(同步获取,只获取一次避免重复调用开销)
|
|
|
|
|
|
*/
|
2025-08-14 09:24:37 +08:00
|
|
|
|
const SYSTEM_INFO = uni.getSystemInfoSync()
|
|
|
|
|
|
|
2025-08-16 14:39:34 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 获取状态栏高度(单位:px)
|
|
|
|
|
|
* @returns {number} 状态栏高度,默认兜底值15px
|
|
|
|
|
|
*/
|
2025-08-14 09:24:37 +08:00
|
|
|
|
export const getStatusBarHeight = () => SYSTEM_INFO.statusBarHeight || 15
|
|
|
|
|
|
|
2025-08-16 14:39:34 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 获取标题栏高度(包含状态栏到标题栏底部的总高度)
|
|
|
|
|
|
* @returns {number} 标题栏高度(单位:px)
|
|
|
|
|
|
* @description
|
|
|
|
|
|
* - 小程序端通过胶囊按钮位置计算
|
|
|
|
|
|
* - 非小程序端返回默认值40px
|
|
|
|
|
|
*/
|
2025-08-14 09:24:37 +08:00
|
|
|
|
export const getTitleBarHeight = () => {
|
2025-08-16 14:39:34 +08:00
|
|
|
|
// 检查是否在小程序环境(支持获取菜单按钮位置)
|
2025-08-14 09:24:37 +08:00
|
|
|
|
if (uni.getMenuButtonBoundingClientRect) {
|
2025-08-16 14:39:34 +08:00
|
|
|
|
// 获取小程序菜单按钮(胶囊按钮)的布局信息
|
2025-08-14 09:24:37 +08:00
|
|
|
|
let { top, height } = uni.getMenuButtonBoundingClientRect()
|
2025-08-16 14:39:34 +08:00
|
|
|
|
// 计算公式:按钮高度 + (按钮顶部到状态栏底部的距离) * 2
|
2025-08-14 09:24:37 +08:00
|
|
|
|
return height + (top - getStatusBarHeight()) * 2
|
|
|
|
|
|
} else {
|
2025-08-16 14:39:34 +08:00
|
|
|
|
// 非小程序环境(如H5/App)返回默认高度
|
2025-08-14 09:24:37 +08:00
|
|
|
|
return 40
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-08-16 14:39:34 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 获取整个导航栏高度(状态栏 + 标题栏)
|
|
|
|
|
|
* @returns {number} 导航栏总高度(单位:px)
|
|
|
|
|
|
*/
|
2025-08-14 09:24:37 +08:00
|
|
|
|
export const getNavBarHeight = () => getStatusBarHeight() + getTitleBarHeight()
|
|
|
|
|
|
|
2025-08-16 14:39:34 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 获取左侧返回按钮的右侧边界坐标(用于特殊平台布局计算)
|
|
|
|
|
|
* @returns {number} 左侧图标右侧的X坐标(单位:px)
|
|
|
|
|
|
* @platform 今日头条小程序专属逻辑
|
|
|
|
|
|
*/
|
2025-08-14 09:24:37 +08:00
|
|
|
|
export const getLeftIconLeft = () => {
|
|
|
|
|
|
// #ifdef MP-TOUTIAO
|
2025-08-16 14:39:34 +08:00
|
|
|
|
// 今日头条小程序获取自定义按钮位置信息
|
2025-08-14 09:24:37 +08:00
|
|
|
|
let {
|
|
|
|
|
|
leftIcon: { left, width },
|
|
|
|
|
|
} = tt.getCustomButtonBoundingClientRect()
|
2025-08-16 14:39:34 +08:00
|
|
|
|
return left + parseInt(width) // 返回按钮右侧边界坐标
|
2025-08-14 09:24:37 +08:00
|
|
|
|
// #endif
|
|
|
|
|
|
|
|
|
|
|
|
// #ifndef MP-TOUTIAO
|
2025-08-16 14:39:34 +08:00
|
|
|
|
// 其他平台返回0(表示不需要特殊处理)
|
2025-08-14 09:24:37 +08:00
|
|
|
|
return 0
|
|
|
|
|
|
// #endif
|
|
|
|
|
|
}
|