vui-design
Version:
A high quality UI Toolkit based on Vue.js
25 lines (20 loc) • 600 B
JavaScript
import raf from "./raf";
/**
* requestAnimationFrame 节流
* scroll 和 touchmove 等事件触发很频繁,比屏幕刷新频率更快,将导致无效的渲染和重绘
* 这里使用 requestAnimationFrame 来优化滚动处理,在一帧中只进行一次有效重绘
*/
export default function requestAnimationFrameThrottle(callback) {
let id;
const factory = args => () => {
id = null;
callback(...args);
};
const throttled = (...args) => {
if (id == null) {
id = raf(factory(args));
}
};
throttled.cancel = () => raf.cancel(id);
return throttled;
};