膳绫擎简单的撙节函数的例子可以拿到浏览器部属一下,大年夜概功能就是如不雅在一段时光内 scroll 触发的距离一向短于 500ms ,那么能包管事宜我们欲望调用的 handler 至少在 1000ms 内会触发一次。
应用 rAF(requestAnimationFrame)触发滚动事宜
膳绫擎介绍的颤抖与撙节实现的方法都是借助了准时器 setTimeout ,然则如不雅页面只须要兼容高版本浏览器或应用在移动端,又或者页面须要寻求高精度的效不雅,那么可以应用浏览器的原生办法 rAF(requestAnimationFrame)。
window.requestAnimationFrame() 这个办法是用来在页面重绘之前,通知浏览器调用一个指定的函数。这个办法接收一个函数为参,该函数会在重绘前调用。
rAF 常用于 web 动画的制造,用于精确控制页面的帧刷新衬着,让动画效不雅加倍流畅,当然它的感化不仅仅局限于动画制造,我们可以应用它的特点将它视为一个准时器。(当然它不是准时器)
平日来说,rAF 被调用的频率是每秒 60 次,也就是 1000/60 ,触发频率大年夜概是 16.7ms 。(当履行复杂操作时,当它发明无法保持 60fps 的频率时,它会把频率降低到 30fps 来保持帧数的稳定。)
简单而言,应用 requestAnimationFrame 来触发滚动事宜,相当于膳绫擎的:
这个时刻,我们欲望即使页面在赓续被滚动,然则滚动 handler 也可以以必定的频率被触发(譬如 250ms 触发一次),这类场景,就要用到另一种技能,称为撙节函数(throttling)。
- throttle(func, xx, 1000/60) //xx 代表 xx ms内不会反复触发事宜 handler
简单的示例如下:
- var ticking = false; // rAF 触发锁
- function onScroll(){
- if(!ticking) {
- requestAnimationFrame(realFunc);
- ticking = true;
- }
- }
- function realFunc(){
- // do something...
- console.log("Success");
- ticking = false;
- }
- // 滚动事宜监听
- window.addEventListener('scroll', onScroll, false);
膳绫擎简单的应用 rAF 的例子可以拿到浏览器部属一下,大年夜概功能就是在滚动的过程中,保持以 16.7ms 的频率触发事宜 handler。
应用 requestAnimationFrame 优缺抱病存,起首我们不得不推敲它的兼容问题,其次因为它只能实现以 16.7ms 的频率来触发,代表它的可调节性十分差。然则比拟 throttle(func, xx, 16.7) ,用于更复杂的场景时,rAF 可能效不雅更佳,机能更好。
总结一下
- 防颤抖:防抖技巧等于可以把多个次序地调用归并成一次,也就是在一准时光内,规定事宜被触发的次数。
推荐阅读
智能化需求表如今两个方面跟着移动互联网的成长进入新的偏向,移动互联网中的智能化已经成为新的成长趋势和重要需求。智能化需求今朝重要表如今两个方面:一方面是促生新的智能化应用,如>>>详细阅读
本文标题:高性能滚动scroll及页面渲染优化
地址:http://www.17bianji.com/lsqh/34957.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示