Gitter migration: Point people to app.gitter.im (rollout pt. 1)
[gitter.git] / public / js / utils / raf-utils.js
blobe02782fef0c04da682ce1b8d5a5f70a3ca91c18e
1 'use strict';
3 var raf = require('./raf');
5 /* Animation-frame frequency debounce */
6 function debounce(fn, context) {
7   var existing;
9   return function() {
10     if (existing) raf.cancel(existing);
11     existing = raf(function() {
12       existing = undefined;
13       fn.call(context);
14     });
15   };
18 /* Only allow one instantiation per animation frame, on the trailing edge */
19 function throttle(fn, context) {
20   var existing;
22   return function() {
23     if (existing) return;
24     existing = raf(function() {
25       existing = undefined;
26       fn.call(context);
27     });
28   };
31 /* Perform an operation on each animation frame for the specified duration */
32 function intervalUntil(fn, ms) {
33   var until = Date.now() + ms;
35   function next() {
36     fn();
38     if (Date.now() < until) {
39       raf(next);
40     }
41   }
43   raf(next);
46 module.exports = {
47   debounce: debounce,
48   throttle: throttle,
49   intervalUntil: intervalUntil