// Add CustomEvent to IE9 and IE10 if (typeof CustomEvent !== 'function') { // Code from: https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent var CustomEvent = function(event, options) { options = options || { bubbles: false, cancelable: false, detail: undefined } var e = document.createEvent('CustomEvent') e.initCustomEvent(event, options.bubbles, options.cancelable, options.detail) return e } CustomEvent.prototype = window.Event.prototype window.CustomEvent = CustomEvent } // requestAnimationFrame / cancelAnimationFrame Polyfill with fallback based on Paul Irish (function(w) { var lastTime = 0 var vendors = ['moz', 'webkit'] for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { w.requestAnimationFrame = w[vendors[x] + 'RequestAnimationFrame'] w.cancelAnimationFrame = w[vendors[x] + 'CancelAnimationFrame'] || w[vendors[x] + 'CancelRequestAnimationFrame'] } w.requestAnimationFrame = w.requestAnimationFrame || function(callback) { var currTime = new Date().getTime() var timeToCall = Math.max(0, 16 - (currTime - lastTime)) var id = w.setTimeout(function() { callback(currTime + timeToCall) }, timeToCall) lastTime = currTime + timeToCall return id } w.cancelAnimationFrame = w.cancelAnimationFrame || w.clearTimeout; }(window))