首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JS中clientHeight、scrollHeight和offsetHeight的大坑,滚动条抖动问题解决

JS中clientHeight、scrollHeight和offsetHeight的大坑,滚动条抖动问题解决 1.什么是clientHeight、scrollHeight和offsetHeight...什么意思呢,让我们来看一个例子: 可以看到,在用scrollHeight获取可滚动内容的高度时有这么一个坑,那就是当你不希望定位的后代元素被计算入滚动总高度的时候,使用scrollHeight...将导致出现比较大的错误。...本来想着用盒子的scrollHeight去获取内容的高度,但是却导致了滚动条的抖动问题,原因是我让定位的后代元素随着滚动高度而改变位置和高度,导致scrollHeight获取到值发生改变,频繁地触发滚动条的刷新...: auto;则想办法让不希望计入滚动高度的元素分离出来,例如用position:fixed代替positon:absolute;或者把它移除结构外。

6.4K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    初学前端用代码实现一个网页老虎机游戏

    数字列表滚动前的要点 格子中的数字列表是怎么滚动的? “无限滚动”是怎么实现的? 第二个和第三个格子的延迟滚动怎么实现的? 随机的滚动结果是怎么实现的? 游戏机是怎么抖动起来的?...格子中的数字列表是怎么滚动的? 前面我们也提到了其实滚动的原理利用的是CSS3的transform:translateY()进行移动。...这里我利用了js种Math对象的Math.random()方法,Math.random()方法会返回介于 0(包含) ~ 1(不包含) 之间的一个随机数, 那如果我将Math.random的结果乘以6,...游戏机是怎么抖动起来的? 前面可能会复杂一点,这里就我们聊个稍微简单易懂的东西。从效果图中我们可以看出老虎机从开始游戏到游戏快结束时一直是在抖动的,关于这个我也给大家稍微分享一下怎么实现的。 ?...3、 重置游戏时由于第一次开始游戏过程中给老虎机添加了抖动效果,重置时应该移除抖动效果。在else代码块中调用stopShake()即可。

    5.4K10

    JS函数节流和防抖的区分和实现详解

    在写JS时,这两个函数比较常见,有时候傻傻分不清用哪个,或者说知道代码要怎么写,但要说出它究竟是节流函数还是防抖函数时一脸楞逼。...注意:固定就是你在mousemove过程中,执行这个节流函数,它一定是200ms(你设定的定时器延迟时间)内执行一次。没到200ms,一定会返回,没有执行回调函数的。...return function(){ //当我们发现这个定时器存在时,则表示定时器已经在运行中,需要返回 if(timer) return; timer...(boolean) 指定调用在节流开始前 [options.trailing=true] (boolean) 指定调用在节流结束后 返回值 (Function) 返回节流的函数 示例 // 避免在滚动时过分的更新定位...示例 // 避免窗口在变动时出现昂贵的计算开销。

    1.9K20

    微信小程序实践:2.3 可滚动的容器组件之 scroll-view

    10,在一些购物类或订餐类小程序中,左侧有物品分类,左侧是物品列表,单击分类,右侧自动滚动到相关位置,右侧列表上下滚动,左侧分类菜单自动切换,获得高亮焦点,这样的功能是怎么实现的?...3.2,滚动锚定 scroll-anchoring 这个属性非常值得一提。它是控制「滚动锚定」特征的,即控制滚动位置不随内容变化而抖动,这种情况据说在用户浏览行为中占比1%。...当出现这样的「抖动永动机」时,简单解决的方法,就是关闭「滚动锚定」策略,或设置一个这样的样式: overflow-anchor:none; 同时,开启这个策略才可以通过样式开启。...在自定义下拉动画时,容器的slot要标记为refresher,虽然官方文档没有这样写,但如果你不这样做,你的自定义下拉动画是拒绝工作的。...如果出现不滚动的现象,可以尝试给外框容器添加样式:white-space:nowrap;display:inline-block,并且保证内容的实际宽度大于屏幕宽度。

    15.4K30

    精读《不再需要 JS 做的 5 件事》

    关注 JS 太久,会养成任何功能都用 JS 实现的习惯,而忘记了 HTML 与 CSS 也具备一定的功能特征。其实有些功能用 JS 实现吃力不讨好,我们要综合使用技术工具,而不是只依赖 JS。...使用 JS 判断还是挺复杂的,你得设法监听父元素滚动,并且在定位切换时可能产生一些抖动,因为 JS 的执行与 CSS 之间是异步关系。...但当我们只用 CSS 描述这个行为时,浏览器就有办法解决转换时的抖动问题。...幻灯片滚动 幻灯片滚动即每次滚动有固定的步长,把子元素完整的展示在可视区域,不可能出现上下或者左右两个子元素各出现一部分的 “割裂” 情况。...另外对于交互过程中的状态,如果需要传递给其他元素响应,还是尽量使用 JS 实现。

    2.3K20

    【前端词典】4 (+1)种滚动吸顶实现方式的比较

    或许写这个代码的人没有注意到“定位父级”这个这个附属条件。 后来在项目中总会遇到滚动吸顶的效果需要实现,现在我将我知道的 4 种滚动吸顶实现方式做详细介绍。...遇到的两个问题 一、吸顶的那一刻伴随抖动 出现抖动的原因是因为:在吸顶元素 position 变为 fixed 的时候,该元素就脱离了文档流,下一个元素就进行了补位。就是这个补位操作造成了抖动。...描述: 当页面往下滚动时,吸顶元素需要等页面滚动停止之后才会出现吸顶效果 当页面往上滚动时,滚动到吸顶元素恢复文档流位置时吸顶元素不恢复原样,而等页面停止滚动之后才会恢复原样 原因:在 ios 系统上不能实时监听...这样可以控制在一定时间内只读取 这里节流函数就直接是用 lodash.js 封装好的 throttle 方法。...我们看看这个属性的兼容性怎么样: ? 大概支持了 60% 以上,在项目中还是可以使用的(你需要做好兼容性处理)。

    2.2K30

    关于页面滚动的两个 CSS 属性

    一般返回顶部都是直接用 JS 实现的,但是我不懂 JS ,写个 console.log 我都不会就不用说写返回顶部了。那就直接用回最原始的方法:锚点定位。...很多人用JS来做返回顶部而不用 CSS 可能就是锚点定位的这个缺点。 但实际上CSS的 scroll-behavior 可以解决这个问题。...scrollbar-gutter 浏览器的滚动条是有宽度的,而且会占用页面的空间导致页面抖动。...原本我是参考了泽泽的 网页滚动条占用网页宽度导致网页抖动问题 来解决的,现在发现了一个新的 CSS 可以用。...:root{ scrollbar-gutter:stable; } 这个 CSS 是固定留一个空间让滚动条使用,这样有没有滚动条页面都是一个宽度,也就不会造成页面抖动。

    73220

    开发 h5| Hybrid | 微信小程序 | 实践踩坑总结十六条

    安卓手机正常,但是ios手机出现,滑块抖动问题,图片会出现闪动的效果。这个问题困扰了很久,网上搜索了大量的解决方案,都没有实际解决问题,自己也尝试了几种方法,也没有成功,当时很奔溃???...但是在容器向上滑动的过程中,滑块会出现抖动,闪动的效果。 ?分析这个原因,应该是ios对position表现不友好的原因,这种类似的原因在小程序里也很常见。...如果圆比较大可能不是很明显,但是如果圆比较小的时候,会出现明显的不圆,圆被拉伸的情况。 大致效果如下所示。 ? ?...我们先看看taro-h5是怎么适配的....当scroll-view滑动的过程中,定位的元素会出现抖动的情况。 ?分析原因,还是 scroll-view 和 ios兼容性的原因造成的。

    2.5K30

    我是这样写文字轮播的

    连续加班加点大半个月,做的活动项目终于算是告一段落了,而今天也将是考验其真正价值的时候,现在将这次开发中遇到的问题做一下总结。...2 jquery 第二个想到的是采用类似jquery实现的图片轮播机制,可以基本完成,但是发现无论是jquery还是zepto文字在滚动的时候会抖动,可用性比较差。...3 css3 + 少量js 再就是现在用到的css3 + 少量js,采用很少的代码就可以实现文字不同长度,文字条数不定的文字无缝滚动轮播。...最后是js: 这里还是写的jquery,相信大家都能看的懂,就是让滚动元素的宽度等于他的内部元素的总宽度减去第一个(或者最后一个)元素的宽度,这样能保证无缝的效果。...最后要说明为什么要用js动态添加css3的类名实现滚动效果,一开始的时候我也是想直接将css3滚动特效写在滚动的元素上,但是在iPhone上发现首次加载当前页面的时候他不会自动滚动。

    1.8K20

    【前端词典】4 种滚动吸顶实现方式的比较

    或许写这个代码的人没有注意到“定位父级”这个这个附属条件。 后来在项目中总会遇到滚动吸顶的效果需要实现,现在我将我知道的 4 种滚动吸顶实现方式做详细介绍。...三、使用原生的 offsetTop 实现 我们知道 offsetTop 是相对定位父级的偏移量,倘若需要滚动吸顶的元素出现定位父级元素,那么 offsetTop 获取的就不是元素距离页面顶部的距离。...不包含文档卷起来的部分。 该函数返回一个 object 对象,有6个属性: top,right,buttom,left,width,height。...遇到的两个问题 一、吸顶的那一刻伴随抖动 出现抖动的原因是因为:在吸顶元素 position 变为 fixed 的时候,该元素就脱离了文档流,下一个元素就进行了补位。就是这个补位操作造成了抖动。...描述: 当页面往下滚动时,吸顶元素需要等页面滚动停止之后才会出现吸顶效果 当页面往上滚动时,滚动到吸顶元素恢复文档流位置时吸顶元素不恢复原样,而等页面停止滚动之后才会恢复原样 原因:在 ios 系统上不能实时监听

    2.5K60

    【Web技术】771- 图片懒加载从简单到复杂

    图片懒加载的进阶实现–滚动加载 上面的方案并不完美,对于用户来说,不在视窗中的图片可能根本不是用户当前关心的图片,所以我们可以让这些图片出现在用户视窗中再进行加载。...运用Intersection Observer 我们可以做到当图片滚动到视窗后再加载该图片。...所以当图片加载完成后会出现网页布局的抖动。...最后使用js选择性的加载真实图片。 Demo 如下 codePen by José M. Pérez 总结 懒加载用户当前视窗中的图片可以提升页面的加载性能。...懒加载的思路是在html解析时先加载一个placeholder图片,最后再用js选择性的加载真实图片。 如果需要滚动加载可以使用 Intersection Observer 。

    90950

    硬核实践经验 - 企鹅辅导 RN 迁移及优化总结

    那怎么办呢?能不能快速的拿到缓存的数据呢?...,直接触发了 ViewPager 的滑动,就是因为无限滚动后面图片还没有生成,动画停止事件回调慢。...这套方案在ios上实现起来没有任何问题,然而 Android上会发生抖动。原因是安卓的banner具有惯性,重定位后速度变化导致“脱节“,就会出现抖动,滑动速度越快抖动越明显。...我们在滑动位置监听函数中也判断了组件当前offset,当其距离基准点小于某个值的时候就可以触发重定位,用肉眼看不出来的抖动的代价,解决滑动到边界才触发重定位的问题。...(React 组件不 unmount)的情况下,会出现白屏(其实内容是有的)。

    3.7K30

    神奇的position:sticky

    sticky特点 sticky属性有以下几个特点: 该元素并不脱离文档流,仍然保留元素原本在文档流中的位置。 当元素在容器中被滚动超过指定的偏移值时,元素在容器内固定在指定位置。...sticky的demo sticky展现效果 看了效果我就会很清楚的知道他的作用,在实际应用中,eg:导航栏随屏幕滚动定位顶部,侧边栏广告随滚动定位顶部等。...——–此时我们看到商品顶部的导航是:导航(1) 优点: 兼容性比较好; 不会出现抖动的效果; 不会导致回流。...缺点: 代码量较多; 浏览器计算消耗大; 在切换的时候会出现闪动的效果。...优点: 代码量少; 不用JS监听滚动事件,减少了浏览器计算的消耗; 不会触发 BFC。

    2K20

    吸顶效果解决方案

    因为stickyEl此时fixed出去了,下面的元素上来,抢占sticky元素老家,所以页面抖了一下 我们希望平滑,不要抖动,所以还需要一个占位符,守住stickyEl老家: var stickyEl...stickyEl.classList.remove('fixed-top'); } }; 把吸顶元素用相同高度的占位符包起来,临界位置stickyEl被fixed出去,空间由stickyHolder撑起来,下面元素挤不上来,页面不抖了...: iscroll-probe.js, probing the current scroll position is a demanding task, that’s why I decided to...);吸顶状态时,让tab列表可以滚动(overflow-y: auto) 但是IOS sticky不由我们控制,且无法实时获知吸顶状态,想要获知吸顶状态的话,又回到了最初的问题,页面滚动过程中,怎样实时获知滚动条位置...事件测试,帮很多人节省了很多时间 Why the Scroll Event Change in iOS 8 is a Big Deal:实例介绍IOS8取消scroll事件限制后的变化,也是上面的前辈写的

    3.6K10

    js中高级部分知识点总结第二篇

    写几篇关于js部分的知识点,之前已经写过一篇了,但是因为js的内容比较多,所以慢慢的更新,之前的第一篇的文章篇幅比较大,导致很多人可能都不怎么看的完,所以后面的关于js方面的知识点,一篇文章就几个知识点就可以了...中的防抖和节流 js优化的方法中有一个不得不提的方式就是防抖和节流,今天我们就简单的说一下他的工作流程,首先说一下节流 节流 节流字面意思就是节省流动,这里的流动映射到js优化中可以简单的理解为操作...,节流就是减少操作的进行,比如我们滚动页面的时候,如果不做节流的操作,假设我们滚动一次就请求一次函数,函数单一的还好, 如果函数本身就执行的比较麻烦的函数,这个时候我们的页面可能会出现卡死的情况,cpu...,那么这个时候很容易出问题,防抖很大一部分应用场景是页面滚动和表单提交,所以这里写一个简单的demo const btn = document.querySelector('button') let...中写html代码,同时支持换行,插值等操作 <!

    25210

    Vue-travel学习笔记

    :activated 4.4 选择城市后返回页面 页面需要被修改 我们之前写的代码是固定的,虽然选择的城市发生变化,但是我们的我们的home页面中的内容并没有变化,怎么办?...使用 window.addEventListener('scroll', this.handleScroll) 来监听滚动的距离,但是这个监听方法被绑定在了全局window中,所以我们的其他页面滚动时也会执行这段代码...,出现了bug,怎么半?...@touchstart.prevent="handleTouchStart" 组织拖动的默认行为 在低版本的安卓浏览器,可能出现白屏现象,怎么办?...出现白屏现象的原因大部分是因为手机浏览器不支持promise特性,我们在项目中安装一个第三方的包 npm install babel-polyfill --save 在main.js引入包 import

    3K10

    前端 debug 的奇技淫巧

    Devtools 作为前端开发,chrome 的 devtools 一定不陌生,下面讲一讲 devtools 里面 debug 的一些思路。...PS:值得注意的是,如果你的表达式报错,那这个断点就会不生效,需要甄别到底是报错引起的断点没进入还是真的没进入。...,比如我们遇到一些页面跳动或者抖动的场景,寻找到底是谁滚动了容器,当然滚动还有其他方法会触发,比如scrollIntoView,但思路都是一样的,代理这个方法即可。...总的思路就是「控制变量」,你可以在代码中批量注释一些代码,然后验证问题还有没有,如果还就的话就继续注释,没有的话问题就出在被注释的代码里,比较像算法中的二分法。...总结 如何 debug 还有更多的技巧,我这里写的也只是一部分,如果有其他更好的思路欢迎留言。

    78860
    领券