uniapp动态计算并设置元素高度

javascript 复制代码
<template>
	<view>
		<scroll-view id="sv-box" :scroll-y="true" :style="{height:navHeight+'px'}"></scroll-view>

		<view id="btn-box">
			<button>取消</button>
			<button>确认</button>
		</view>
	</view>
</template>

export default {
	name: "demo",
	components: {},
	props: {},
	data() {
		return {
			pH: 0, //窗口高度
			navHeight: 0, //元素的所需高度
		}
	},
	methods: {
		init() {
			let that = this;
			uni.getSystemInfo({ //调用uni-app接口获取屏幕高度
				success(res) { //成功回调函数
					that.pH = res.windowHeight //windoHeight为窗口高度,主要使用的是这个
					let titleH = ''
					uni.createSelectorQuery().select("#sv-box").boundingClientRect(data => {
						titleH = that.pH - data.top //计算高度:元素高度=窗口高度-元素距离顶部的距离(data.top)
					}).exec()

					uni.createSelectorQuery().select("#btn-box").boundingClientRect(data => {
						titleH -= data.height //再减去底部元素高度(data.height)
					}).exec()
					
					that.navHeight = titleH
				}
			})
		}
	}
}

注意 :如果做为popup 组件使用,不要在mounted 里调用计算方法,会出现高度计算错误。因为当mounted 执行时,popup中的内容还未渲染生成,导致高度按全屏高度计算。

相关推荐
AI_零食13 小时前
番茄钟鸿蒙PC Electron框架完成:状态机、定时器管理与专注力工具设计
前端·javascript·华为·electron·开源·鸿蒙·鸿蒙系统
提子拌饭13313 小时前
逛三园游戏——基于鸿蒙PC Electron框架实现
前端·javascript·游戏·华为·electron·鸿蒙
llz_11213 小时前
web-第三次课后作业
前端·后端·web
遗憾随她而去.13 小时前
Web地图全体系深度梳理:引擎、数据源、图层、投影核心知识
前端
爱因斯坦乐13 小时前
Vue项目整合
前端·javascript·vue.js
FlyWIHTSKY14 小时前
TS、TSX、JS、JSX 文件扩展名详解
开发语言·javascript·ecmascript
无风听海14 小时前
IndexedDB 深度指南 浏览器中的事务型对象数据库
前端·数据库
ct97814 小时前
组件间的通信
前端·javascript·vue.js
左手吻左脸。15 小时前
Vue 全栈面试题大全(2026 最新版最详细)
前端·javascript·vue.js
Aphasia31115 小时前
手写KeepAlive组件
前端·react.js·面试