UNPKG

newton

Version:

A playful, particle-based physics engine designed from the ground up for JavaScript.

48 lines (39 loc) 1.52 kB
module.exports = getFrame(); function getFrame() { var lastTime = 0; // Browsers if (typeof window !== 'undefined') { var vendors = ['ms', 'moz', 'webkit', 'o']; var isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0; var isFirefox = typeof InstallTrigger !== 'undefined'; // Firefox 1.0+ var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0; var isChrome = !!window.chrome && !isOpera; for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame']; } if (!window.requestAnimationFrame) { window.requestAnimationFrame = timeoutFrame; window.cancelAnimationFrame = cancelTimeoutFrame; } return { onFrame: window.requestAnimationFrame.bind(window), cancelFrame: window.cancelAnimationFrame.bind(window) }; } // Node return { onFrame: timeoutFrame, cancelFrame: cancelTimeoutFrame }; function timeoutFrame(simulator, element) { var currTime = new Date().getTime(); var timeToCall = Math.max(0, 16 - (currTime - lastTime)); var id = setTimeout(function() { simulator(currTime + timeToCall); }, timeToCall); lastTime = currTime + timeToCall; return id; } function cancelTimeoutFrame(id) { clearTimeout(id); } }