DOM元素高度获取踩坑
前情
最近在开发一个需求,需要做一个滚动列表展示当前中奖用户,但是列表每一项高度又不是固定的,每次滚动前需要先获取当前要滚动的块是多高才知道要滚动多少。
坑位
在开发这个滚动列表的时候发现滚着滚着就会出现滚动距离出现差距,慢慢的滚动距离不够一块高度,而且误差会越来越大,到最后复位的时候能明显看出跳跃感。
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元素高度获取踩坑的更多相关文章
- javascript中获取dom元素高度和宽度
javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网 ...
- vue获取dom元素高度的方法
获取高度: <div ref="自定义名称" > </div>要在钩子mounted里面dom结构生成后去获取dom的高度,宽度,修改样式等操作!!! mo ...
- vue3+ts获取dom元素高度
vue3+ts获取dom元素高度 <template> <div class="digestDetail-indedx"> <div class=&q ...
- 设置div 居中 和得到dom元素高度
javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网 ...
- 弹框内画echarts图dom元素无法获取的问题
弹框内画echarts图dom元素无法获取的问题? 什么意思呢?就是当我们打开弹框之后,此时要画eachars图,可是echarts图的容器dom此时为null, 因此我们需要做的就是在dom元素获取 ...
- ios UIWebView加载HTMLStr图文,关于图片宽高设置,webView内容实际高度的踩坑问题
一.关于UIWebView 与 WKWebView 选取问题 从发布时间看: 2008年7月11日,在新一代iPhone3G正式发售当天,iPhone OS 2.0(iOS 2.0)推出,这时候就有U ...
- Js操作DOM元素及获取浏览器高宽
在JavaScript中,经常会来获取Document文档元素,是 HTML 文档对象模型的英文缩写,Document Object Model for HTML,是基于浏览器编程,HTML DOM ...
- html dom 转化成图片踩坑记(canvas toDataURL)
需求 在开发过程中遇到这么一个需求,h5页面需要将一个html dom转化成图片,便于用户保存. 面向百度搜索第三方得 html2canvas 和 dom-to-image 两者在写这篇笔记之前在gi ...
- javascript中获取dom元素的高度和宽度
javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网 ...
- js | javascript中获取dom元素的高度和宽度
javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网 ...
随机推荐
- Qt连连看(三)非核心功能实现
主要的界面设计好后,我们来看下非核心功能的实现.由于这块不需要用到稍微复杂的算法,解决起来相对来说容易许多,于是我们选择先实现这部分非核心功能,这块几乎不涉及游戏的核心逻辑. 游戏界面如下: 这时我们 ...
- Maven高级——私服(Nexus)
私服 私服是一台独立的服务器,用于解决团队内部的资源共享与资源同步问题 Nexus Sonatype公司的一款maven私服产品 下载地址(需要魔法):nexus-3.49.0-02-win64.zi ...
- MVC模式与三层架构
MVC 模式 三层架构 MVC 模式 与 三层架构 的关系
- 使用composer创建项目时报错:Composer could not find the config file?
使用composer创建项目时报错:Composer could not find the config file:C:\Composer ....? 一般报这个错就是composer安装的时候配置了 ...
- 数据库周刊33丨腾讯Tbase新版本发布;“2020数据技术嘉年华”有奖话题遴选;阿里云技术面试题;APEX 实现数据库自动巡检;MYSQL OCP题库……
摘要:墨天轮数据库周刊第33期发布啦,每周1次推送本周数据库相关热门资讯.精选文章.干货文档. 热门资讯 1.中国移动国产OLTP数据库中标公告:南大金仓阿里,万里开源中兴 分获大单[摘要]近日,中国 ...
- C#中的原始字符串
// 原始字符串使用 三个引号(至少三对)包裹,ps: 引号单独占用一行 // 原始字符串使用变量需要加两个 $$"""{变量}""" st ...
- wpf之样式
在Window.Resources中书写样式 : <Window.Resources> <Style TargetType="Button" > </ ...
- 创建一个简单的基于MyBatis的项目
- npm install报错 Error: EACCES: permission denied
报错内容 Unable to save binary /root/packageadmin/spring-boot-admin-2.1.6/spring-boot-admin-server-ui/no ...
- Java解析HJ212环保报文
Java解析HJ212环保报文 toMap方法对报文进行基础的解析 /** * HJ212报文转换为标准化的Map * @param str HJ212报文 * @return */ public s ...