🎶 Sym - 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台

📕 思源笔记 - 一款桌面端笔记应用,支持 Windows、Mac 和 Linux

🎸 Solo - B3log 分布式社区的博客端节点,欢迎加入下一代社区网络

♏ Vditor - 一款浏览器端的 Markdown 编辑器

浏览器 - 页面重绘前进行回调

2019-12-03

描述

在每一帧动画前调用提供的回调函数。

提示

  • 需使用递归
  • 变量 runningtrue 时,将持续调用已提供回调函数的 window.requestAnimationFrame()
  • 对象中应包含 startstop 两个方法,以便手工对记录状态进行控制
  • 第二个参数 autoStart 默认值为 true。当运行该函数时,默认调用 start 方法

代码

const recordAnimationFrames = (callback, autoStart = true) => {
  let running = true,
    raf;
  const stop = () => {
    running = false;
    cancelAnimationFrame(raf);
  };
  const start = () => {
    running = true;
    run();
  };
  const run = () => {
    raf = requestAnimationFrame(() => {
      callback();
      if (running) run();
    });
  };
  if (autoStart) start();
  return { start, stop };
};

示例

在每一帧动画前打印日志:

const cb = () => console.log('Animation frame fired');
const recorder = recordAnimationFrames(cb); // 在每一帧之前打印 'Animation frame fired'
recorder.stop(); // 停止执行回调函数
recorder.start(); // 再次开启
const recorder2 = recordAnimationFrames(cb, false); // 在每一帧记录前需要明确的执行 `start`

返回总目录

每天 30 秒系列之 JavaScript 代码


欢迎注册黑客派社区,开启你的博客之旅。让学习和分享成为一种习惯!

2 评论
Adrift001 • 2019-12-03
回复 删除

V没去北京么? 为啥位置还是昆明呢?

AdlerED • 2019-12-03
回复 删除
G网的移动和联通采用的是漫游地接入方式,漫游到哪里IP地址就显示是哪里的。
如果是用的C网电信手机号码,电信采用的是归属地接入方式。即使漫游到北京之后,上网的IP地址还是归属地的昆明。