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

使用 requestAnimationFrame 解决滚动点停误触和 scroll 事件延迟

于是想到了使用 requestAnimationFrame 判断某个元素的位置是否发生变化来标识当前页面(DOM)是否在滚动。...常见的滚动点停误触 这是移动端的前端开发中实际遇到的一个问题,当我们的页面出现滚动条的时候,用手滑动屏幕,屏幕上页面内容会快速滚动,不会因为手已经离开了屏幕而滚动停止。...当我们想要停止滚动的时候,轻轻点击屏幕,让屏幕停止。但是这个时候有个问题,如果屏幕上点击的位置恰好可以点击,这个时候就会误触。...requestAnimationFrame() 判断在两帧之间元素的位置是否发生变化,以此来标识页面滚动是否停止。...使用 requestAnimationFrame 并且只在 touchend 后触发检查机制,对页面性能也不会造成太大的影响。目前来看是不错的解决方案。

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

    rAF实现表格内容自动滚动

    目标: 让表格的内容会自动滚动 鼠标悬浮,动画停止 到底后会自动回到顶部,继续滚动 element表格自带滚动 首先呢,element的表格是自带了滚动效果的,但是需要小小的设置一下。...// 该动画方法需要携带参数,所以使用bind方法来携带参数 } 图片 鼠标悬浮,动画停止 我们上面已经初步让表格内容滚动起来了,接下来实现一下第二个步骤鼠标悬浮,动画停止 停止rAF动画,需要获取调用...window.requestAnimationFrame()方法时返回的 ID,和定时器方法一样,所以我们调用window.requestAnimationFrame()方法时,需要使用一个变量接住它,...方便停止的时候使用。...然后,绑定鼠标事件:mouseenter:动画停止,mouseleave:继续动画。

    2.1K20

    JavaScript各种定时器总结

    制作动画时少不了使用setTimeout和setInterval,特别是一个经典的情景,就是一个元素本来的display是none的。...requestAnimationFrame 在日常使用setTimeout中,我们最常用的就是用来制作动画(操作dom)和定时访问接口。...除此之外,requestAnimationFrame还有以下两个优势: 对CPU友好,如果使用setTimeout实现动画,那么页面如果不处于激活的状态,其实setTimeout还是会继续在后台执行的,...但是requestAnimationFrame就不一样了,当页面不是激活状态的情况下,那么该页面的屏幕刷新也会停止,从而requestAnimationFrame也会停止执行。...当页面激活的时候,动画就从上一次的停止的地方继续执行,非常有效的节省了CPU的开销。

    64720

    【今天你更博学了么】一个神奇的前端动画 API requestAnimationFrame

    JavaScript:setTimeout 和 setInterval Css3:transition 和 animation Html:canvas 和 SVG requestAnimationFrame...注意:若你想在浏览器下次重绘之前继续更新下一帧动画,那么回调函数自身必须再次调用window.requestAnimationFrame() 原来在回调函数中要再次调用 requestAnimationFrame...小技巧 我们这样就可以把每两次执行的时间间隔传递给外部使用了。...requestAnimationFrame 采用 浏览器时间间隔 ,保持最佳绘制效率,不会因为间隔时间过短,造成过度绘制,消耗性能;也不会因为间隔时间太长,使用动画卡顿不流畅,让各种网页动画效果能够有一个...CSS3动画 CSS3 的transition 和 animation 搭配使用可以说是非常强大了,但是也有的触手伸不到的地方,比如说 scrollTop,另外 CSS3 动画支持的贝塞尔曲线也是有限的

    70920

    JS深入浅出 - requestAnimationFrame

    JS 动画 早期 JS 定时动画:主要通过 setTimeout 和 setIntarval 实现。 HTML5 出现后:又出现了两种实现动画的方式,1....2.2 内部执行机制 首先判断 document.hidden 属性是否可见(true),可见状态下才能继续执行以下步骤。 浏览器清空回调队列中的动画函数。...(现阶段浏览器对此做了优化,如 FireFox/Chrome 浏览器对定时器做了优化:页面闲置时,如果时间间隔小于 1000ms,则停止定时器,与requestAnimationFrame行为类似。...使用 requestAnimationFrame 执行动画,最大优势是能保证动画帧回调队列中的回调函数在屏幕每一次刷新前都被执行一次,然后将结果一起重绘到浏览器页面,这样就不会引起丢帧,动画也就不会卡顿...requestAnimationFrame() 只有当标签页处于活跃状态是才会执行,当页面隐藏或最小化时,会被暂停,页面显示,会继续执行,节省了 CPU 开销。

    1.7K30

    原生 JS 实现惯性滚动,给鼠标滚轮增加阻尼感,纵享丝滑

    前言当我们在移动终端上滑动页面,手指离开屏幕后,页面的滚动并不会马上停止,而是在一段时间内继续保持惯性滚动,并且滑动阻尼感和持续时间与滑动手势的幅度成正比。...('wheel', onWeel); // { passive: false }帧绘制函数window.requestAnimationFrame() 告诉浏览器——你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画...通过 JS 模拟页面滚动实际可以看做是在执行一个连续的动画,这时候肯定就离不开与浏览器动画息息相关的 requestAnimationFrame 函数了,我们需要知道它的回调函数会传入一个 DOMHighResTimeStamp...(value);}此时页面就可以像往常一样滚动了,并且是不依赖系统默认事件的,由 JS 代理滚动效果,接下来我们继续往方法里处理如何平滑过渡。...lerp 则无用当然这只是最基础的例子,缺少一些边界处理等,如在实际生产项目中使用,推荐安装前面提到的 lenis 这个库,它拥有更完善的功能,基础使用方法和本例是一样的。

    1.8K41

    requestAnimationFrame & 定时器

    除此之外还有两大优势: CPU节能:使用setTimeout实现的动画,当页面被隐藏或者最小化时,setTimeout仍在后台执行动画任务,但是刷新动画也没有意义,因为页面是不可见的,完全是浪费CPU资源...而requestAnimationFrame则完全不同,当页面处理为未激活的状态下,该页面的屏幕刷新任务也会被系统暂停,因此跟着系统步伐走的requestAnimationFrame也会停止渲染,当页面被激活时...,动画就从上次挺溜的地方继续执行,而且节省CPU开销。...requestAnimationFrame定义: window.requestAnimationFrame():告诉浏览器,你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。...注意:若你想在浏览器下次重绘之前继续更新下一帧动画,那么回调函数自身必须再次调用window.requestAnimationFrame(); <!

    1.2K10

    2020已经过去五分之四了,你确定还不来了解一下JS的rAF?

    但确实rAF和动画有关系 我们先来看一下MDN官网对的requestAnimationFrame解释: window.requestAnimationFrame() 告诉浏览器——你希望执行一个动画,...requestAnimationFrame兼容IE10及以上,这时候有人会有疑问,怎么才到IE10啊,但其实我们最常使用的CSS3 animation属性也是IE10之后才有的,在IE9之前想要实现动画基本使用的是..., 当然,可以通过改变这个间隔时间来微调动画效果,可是你永远没有办法确定最优方案,因为它总会和刷新频率存在交叉。...「节省系统资源,提高性能和视觉效果」在页面被置于后台或隐藏时,会自动的停止,不进行函数的执行,当页面激活时,会重新从上次停止的状态开始执行,因此在性能开销上也会相比setTimeout小很多。...setTimeout的感觉使用requestAnimationFrame方法制作动画啦!

    1.1K30

    深入理解 RequestAnimationFrame

    在Web应用中,实现动画效果的方法很多,Javascript 中可以通过SetInterval来实现,CSS 3可以使用 Transition 和 Animation 来实现,HTML 5 中Canvas...CPU节能:使用SetTinterval 实现的动画,当页面被隐藏或最小化时,SetTinterval 仍然在后台执行动画任务,由于此时页面处于不可见或不可用状态,刷新动画是没有意义的,完全是浪费CPU...而RequestAnimationFrame则完全不同,当页面处理未激活的状态下,该页面的屏幕刷新任务也会被系统暂停,因此跟着系统步伐走的RequestAnimationFrame也会停止渲染,当页面被激活时...,动画就从上次停留的地方继续执行,有效节省了CPU开销。...优雅降级 由于RequestAnimationFrame目前还存在兼容性问题,而且不同的浏览器还需要带不同的前缀,因此需要通过优雅降级的方式对RequestAnimationFrame进行封装,优先使用高级特性

    1.7K10

    前端开发中web和移动端动画的常见实现方式

    :动画次数,无限循环 infiniteanimation-direction:设置是否可以反向播放动画animation-fill-mode:设置 CSS 动画在执行之前和之后如何将样式应用于其目标,一般用来解决动画停止后界面闪现问题...若你想在浏览器下次重绘之前继续更新下一帧动画,那么回调函数自身必须再次调用 requestAnimationFrame(),这样就能实现动画效果了。...和 setTimeout 定时器类似,requestAnimationFrame 也可以通过 cancelAnimationFrame 取消回调函数请求。...() 会被暂停调用以提升性能和电池寿命function animate() { // 执行动画任务 requestAnimationFrame(animate)}requestAnimationFrame...HTML5 中是支持内联 SVG 的,所以我们可以将 svg 标签当作 html 标签直接在页面结构中使用,成为 DOM 的一部分,然后用 JavaScript 和 CSS 都是可以对其进行操作的,所以

    78620

    实现文字滚动播放

    实现文字滚动播放 实现文字滚动播放,通过使用CSS3动画与Js控制来实现,由于使用CSS动画来控制偏移限制较多,因此通常还是使用Js来实现。...实现 CSS Animation 使用CSS动画方法,使用position: relative配合left属性来控制文字元素距离左侧相对偏移的距离。...window.requestAnimationFrame(() => loop()); // 动画递归调用 } window.requestAnimationFrame...(() => loop()); // 启动动画 // requestAnimationFrame当页面处理未激活的状态下,该页面的屏幕刷新任务也会被系统暂停,因此跟着系统步伐走的requestAnimationFrame...也会停止渲染,当页面被激活时,动画就从上次停留的地方继续执行,setInterval需要使用加入visibilitychange监听来清除与重设定时器 })(window, document);

    4K40

    requestAnimationFrame的使用

    在Web应用中,实现动画效果的方法比较多,JavaScript 中可以通过定时器 setTimeout 来实现,css3 可以使用 transition 和 animation 来实现,html5 中的...除此之外,html5 还提供一个专门用于请求动画的 API,即  requestAnimationFrame(rAF),顾名思义就是 “请求动画帧”。 ...市面上常见的显示器有两种,即 CRT和 LCD, CRT 是一种使用阴极射线管(Cathode Ray Tube)的显示器,LCD 就是我们常说的液晶显示器( Liquid Crystal Display...(render); 除此之外,rAF 还有以下两个优势: CPU节能:使用 setTimeout 实现的动画,当页面被隐藏或最小化时,setTimeout 仍然在后台执行动画任务,由于此时页面处于不可见或不可用状态...而 rAF 则完全不同,当页面处理未激活的状态下,该页面的屏幕绘制任务也会被系统暂停,因此跟着系统步伐走的 rAF 也会停止渲染,当页面被激活时,动画就从上次停留的地方继续执行,有效节省了 CPU 开销

    1K20

    requestAnimationFrame 刨根问底

    保证 JavaScript 在帧开始时运行的唯一方式是使用 requestAnimationFrame。...框架或示例可能使用 setTimeout 或 setInterval 来执行动画之类的视觉变化,但这种做法的问题是,回调将在帧中的某个时点运行,可能刚好在末尾,而这可能经常会使我们丢失帧,导致卡顿。...还有以下两个优势: CPU节能:使用setTimeout实现的动画,当页面被隐藏或最小化时,setTimeout 仍然在后台执行动画任务,由于此时页面处于不可见或不可用状态,刷新动画是没有意义的,完全是浪费...而requestAnimationFrame则完全不同,当页面处理未激活的状态下,该页面的屏幕刷新任务也会被系统暂停,因此跟着系统步伐走的requestAnimationFrame也会停止渲染,当页面被激活时...,动画就从上次停留的地方继续执行,有效节省了CPU开销。

    57630

    旋转吧!徽章!

    拖动 3D 徽章 根据拖动的速度徽章的惯性动画 停止时总是停留在正/反面 进入时的晃动动画 轻拍晃动效果 陀螺仪效果(晃动手机) 尽管这是一个简单的效果,但也同样有着一些细节和需要注意的问题。...当我们的滑动停止后,徽章仍继续转动,这意味着这应当是一个动画。...反而不如使用 setInterval 替代 requestAnimationFrame。 不过如果你业余写的小玩具用户量并没有达到蚂蚁森林的千万级别,也许还并不需要花心思考虑这些。...elapsed; setRotation(deltaRotation); ... // 继续播放动画 window.requestAnimationFrame(step...我们还可以自己尝试继续加一点点优化,细节决定成败。 初始晃动效果 用户打开徽章时,进行缓动,让用户知道它是可拖动的。此外这可以和此后的惯性动画共用一个实例,仅需赋予一个开始的初速度,即可快速实现。

    4.6K31

    要实现60FPS动画, 你需要了解这些

    首先要有工具能够分析性能表现和瓶颈 打开 Chrome devtools 的 Performance 面板, 点击按钮或者使用快捷键(CMD + E)开始记录性能 ?..., 并且卡顿结束会跳帧, 而不是基于卡顿前的位置继续绘制动画 ?...使用硬件加速后, 绘制过程将不再占用主线程, 直接在 GPU 上完成 因此, 点击按钮阻塞主线程, 也并不会影响动画, 你可以亲自试一试 使用 JS 动画 首先使用 setInterval 实现动画循环...image timer 是固定间隔时间触发的, 每过一段时间就会出现在一帧内 timer 触发两次的情况 而且同样的, JS动画也是会被主线程阻塞的 使用 requestAnimationFrame 优化...JS 动画 在高帧率情况下, setInterval 和 requestAnimationFrame 并没有明显的区别, 我们来增加单帧内的计算量, 首先看 setInterval function

    1.3K10
    领券