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