前情

最近在开发一个需求,需要做一个滚动列表展示当前中奖用户,但是列表每一项高度又不是固定的,每次滚动前需要先获取当前要滚动的块是多高才知道要滚动多少。

坑位

在开发这个滚动列表的时候发现滚着滚着就会出现滚动距离出现差距,慢慢的滚动距离不够一块高度,而且误差会越来越大,到最后复位的时候能明显看出跳跃感。

Why?

因为我这是个移动端项目,使用的REM适配方式做的布局,DOM尺寸会出现小数的情况,而我用来获取元素高度的API是offsetHeight,offsetHeight在获取高度的时候会舍弃小数位。

解决办法

方式1

使用 getComputedStyle() 方法来获取准确的元素高度

const luckyItem = document.querySlector('.lucky-item');
let height = window.getComputedStyle(luckyItem ,null).height //得到 18.7656px
let num = parseFloat(height.substring(0,height.indexOf('px'))); // 得到18.7656

此方法虽然可行,但是有一定缺陷,需要考虑到有padding和border的情况

const luckyItem = document.querySlector('.lucky-item');
const {height,paddingTop,paddingBottom,border} = window.getComputedStyle(luckyItem ,null);
let height = parseFloat(height) + parseFloat(paddingTop) + parseFloat(paddingBottom) + parseFloat(border); //得到 18.7656

方式2(推荐)

使用getBoundingClientRect方法来获取准确的元素高度

const luckyItem = document.querySlector('.lucky-item');
let height = luckyItem.getBoundingClientRect().height //得到 18.7656

注:对于小数点位数要不要做精度到2位或者多少位处理,我们可以不用管,交由浏览器去处理吧。

DOM元素高度获取踩坑的更多相关文章

  1. javascript中获取dom元素高度和宽度

    javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网 ...

  2. vue获取dom元素高度的方法

    获取高度: <div ref="自定义名称" > </div>要在钩子mounted里面dom结构生成后去获取dom的高度,宽度,修改样式等操作!!! mo ...

  3. vue3+ts获取dom元素高度

    vue3+ts获取dom元素高度 <template> <div class="digestDetail-indedx"> <div class=&q ...

  4. 设置div 居中 和得到dom元素高度

    javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网 ...

  5. 弹框内画echarts图dom元素无法获取的问题

    弹框内画echarts图dom元素无法获取的问题? 什么意思呢?就是当我们打开弹框之后,此时要画eachars图,可是echarts图的容器dom此时为null, 因此我们需要做的就是在dom元素获取 ...

  6. ios UIWebView加载HTMLStr图文,关于图片宽高设置,webView内容实际高度的踩坑问题

    一.关于UIWebView 与 WKWebView 选取问题 从发布时间看: 2008年7月11日,在新一代iPhone3G正式发售当天,iPhone OS 2.0(iOS 2.0)推出,这时候就有U ...

  7. Js操作DOM元素及获取浏览器高宽

    在JavaScript中,经常会来获取Document文档元素,是 HTML 文档对象模型的英文缩写,Document Object Model for HTML,是基于浏览器编程,HTML DOM ...

  8. html dom 转化成图片踩坑记(canvas toDataURL)

    需求 在开发过程中遇到这么一个需求,h5页面需要将一个html dom转化成图片,便于用户保存. 面向百度搜索第三方得 html2canvas 和 dom-to-image 两者在写这篇笔记之前在gi ...

  9. javascript中获取dom元素的高度和宽度

    javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网 ...

  10. js | javascript中获取dom元素的高度和宽度

    javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网 ...

随机推荐

  1. 利用PaddleHub 进行人脸检测识别、并对图片进行抠图

    利用PaddleHub 进行人脸检测识别.并对图片进行抠图   本文是利用百度的飞桨平台的paddle进行人脸的检测和抠图,但是里面也有一些小问题,特记录一下笔记,以便以后观看学习. 环境:pytho ...

  2. .NET 8.0 酒店管理系统设计与实现

    前言 给大家推荐一个基于.NET 8.0 的中小型酒店设计的管理系统. 随着酒店的日常工作增加,很难用人工去进行处理一些繁琐的数据,也可能会因为人工的失误而造成酒店的损失,因此需要一款可以协助酒店进行 ...

  3. 如何快速定位 Linux Panic 出错的代码行

    问题描述 内核调试中最常见的一个问题是:内核Panic后,如何快速定位到出错的代码行? 就是这样一个常见的问题,面试过的大部分同学都未能很好地回答,这里希望能够做很彻底地解答. 问题分析 内核Pani ...

  4. 利用csv文件信息,将图片名信息保存到csv文件当中

    我们可以利用train.csv文件信息, 再结合给定的文件路径(path)信息,可以将给定字目录下的图片名信息整合到scv文件当中. train.csv文件格式: 图片名信息: 代码如下: from ...

  5. 11 Self-Attention相比较 RNN和LSTM的优缺点

    博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...

  6. DIKI:清华提出基于残差的可控持续学习方案,完美保持预训练知识 | ECCV'24

    本研究解决了领域-类别增量学习问题,这是一个现实但富有挑战性的持续学习场景,其中领域分布和目标类别在不同任务中变化.为应对这些多样化的任务,引入了预训练的视觉-语言模型(VLMs),因为它们具有很强的 ...

  7. JOI 2018 Final

    A - ストーブ (Stove) 有 \(n\) 个客人将要来访,第 \(i\) 个客人的来访时间为 \([a_i, a_i + 1]\),保证 \(\forall i \in [1, n), a_i ...

  8. 华为OpenEnler Linux系统部署LNMP

    LNMP是Linux+Nginx+Mysql+PHP所构建的一个动态开发环镜 我这里使用的系统是华为的OpenEnler系统,使用了Nginx1.12版本.Mysql8和PHP7.4 如果有出错的地方 ...

  9. POI方式实现Excel表格数据导出

    Excel表格导出 1.添加pom依赖 1 <!-- office 操作工具 --> 2 <dependency> 3 <groupId>org.apache.po ...

  10. CentOS_7安装docker

    CentOS_7安装docker Install Docker Engine on CentOS 官网文档:https://docs.docker.com/engine/install/centos/ ...