DOM元素的各种宽度和高度

本文详细解析了JavaScript和jQuery中获取网页高度、宽度的方法,避免使用不当导致的兼容性问题,并通过实例展示了如何正确判断是否滚动到底部。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DOM元素的各种高度和宽度可以用js直接获取,也可以用JQuery获取,但它们的函数很多,容易搞混

博主在做一个滚动加载更多列表的时候,也曾因为获取高度的方法使用不当,造成部分手机不兼容,根据自己在网上查的资料和经验,这里进行详细说明:

Javascript:


网页可见区域宽: document.body.clientWidth
网页可见区域高: document.body.clientHeight
网页可见区域宽: document.body.offsetWidth (包括边线的宽)
网页可见区域高: document.body.offsetHeight (包括边线的高)


clientWidth = width + padding
clientHeight = height + padding
offsetWidth = width + padding + border
offsetHeight = height + padding + border


网页正文全文宽: document.body.scrollWidth
网页正文全文高: document.body.scrollHeight
网页被卷去的高: document.body.scrollTop
网页被卷去的左: document.body.scrollLeft


网页正文部分上: window.screenTop
网页正文部分左: window.screenLeft
屏幕分辨率的高: window.screen.height
屏幕分辨率的宽: window.screen.width
屏幕可用工作区高度: window.screen.availHeight
屏幕可用工作区宽度: window.screen.availWidth

 

JQuery:

1.height():相当于js属性height


2.innerHeight():相当于js属性clientHeight


3.outerHeight(),相当于js属性offsetWidth;带参数则包含margin




4.scrollTop(),相当于js属性scrollTop

滚动的高度,不包含当前窗口可见高度


注意:$(document).height()和$(window).height()是不一样的,前者是整个文档的高度,后者是当前窗口的可见高度

因此,要计算是否滚动到底部,就要这样判断

if ($(document).height() - $(this).scrollTop() == $(this).height())

<think>好的,用户的问题是在UniApp中使用JavaScript获取DOM元素宽度高度。我需要先回想一下UniApp的相关知识,特别是关于DOM操作的部分。 记得UniApp是基于Vue.js的,所以常规的Vue方法应该适用。不过,UniApp运行在小程序或移动端环境,Web的DOM操作可能有所不同。用户提供的引用内容中提到,可以通过ref或者id来获取元素引用,比如引用[1]引用[4]都提到了使用ref属性或者id来获取元素。 在引用[4]中,用户展示了两种方法:使用this.$refs.targetDom或者document.querySelector('#targetDom')。但需要注意的是,UniApp可能在不同平台上的兼容性不同。比如在小程序中,document对象可能不可用,所以更推荐使用Vue的ref方式。 接下来,获取到元素后,如何得到尺寸呢?常规的Web方法是使用offsetWidthoffsetHeight,或者getBoundingClientRect()。但在UniApp中可能需要使用uni.createSelectorQuery()方法,这是UniApp提供的API,用于跨平台获取节点信息。 用户可能没有考虑到不同平台的差异,直接使用Web方法可能在小程序里不生效。因此,正确的做法应该是使用uni.createSelectorQuery()来查询节点信息,然后通过exec()方法获取尺寸数据。同时,ref的方式在Vue中可能只能获取组件实例,而不是DOM节点,所以需要结合UniApp的节点查询API。 总结步骤应该是:首先给元素设置id或ref,然后使用uni.createSelectorQuery().select()方法选择元素,接着调用boundingClientRect()方法获取尺寸,最后执行exec()得到结果。此外,还需要注意在生命周期钩子中调用,比如onReady,确保DOM已经渲染完毕。 需要验证一下是否正确。比如在引用[4]中,用户提到使用ref或id获取节点,但可能在实际使用中,uni.createSelectorQuery()更可靠。因此,回答中应强调使用UniApp官方推荐的API,并给出具体代码示例,同时解释不同方法的适用场景注意事项。</think>在 UniApp 中获取 DOM 元素的尺寸,需要通过**跨平台兼容的节点查询 API** 实现,具体步骤如下: ### 方法一:使用 `uni.createSelectorQuery()`(推荐) ```javascript // 通过 id 选择元素(注意需添加 # 符号) uni.createSelectorQuery() .select('#targetDom') .boundingClientRect(rect => { console.log('宽度:', rect.width, '高度:', rect.height) }) .exec() ``` ### 方法二:使用 Vue 的 `$refs` 获取(需结合节点查询) ```javascript // 添加 ref 属性到元素 <view ref="myView"></view> // 在 script 中获取 this.$nextTick(() => { uni.createSelectorQuery() .in(this) // 限定组件作用域 .select('.myView') .boundingClientRect(rect => { console.log('尺寸:', rect) }) .exec() }) ``` ### 注意事项 1. **生命周期时机**:需在 `onReady` 生命周期或 `$nextTick` 回调中调用,确保元素已渲染完成[^4] 2. **跨平台差异**:小程序环境不支持原生 DOM 操作(如 `document.querySelector`)[^4] 3. **返回值结构**:`boundingClientRect` 返回对象包含 `width/height/top/left` 等完整尺寸信息 $$ \text{响应式布局公式参考:元素宽度} = \min(\text{容器宽度}, \text{最大设定宽度}) $$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值