class MakeCanvas
constructor : (elemId,width,height,@slideTimeThrottled) ->
@ctx = document.getElementById(elemId).getContext '2d'
@ctx.canvas.width = width
@ctx.canvas.height = height
@ctx.canvas.style.marginTop = (((height / 2) * -1)+(43 / 2))+'px'
@aniInterval = null
clearInterval @aniInterval
@frameNum = 0
drawFrame : ->
console.log 'drawFrame not overwritten'
animate : ->
clearInterval @aniInterval
@frameNum = 0
@aniInterval = setInterval (=>
@ctx.clearRect 0, 0, @ctx.canvas.width, @ctx.canvas.height
@drawFrame()
@frameNum++
@stop() if @frameNum > @slideTimeThrottled
), frameRate
stop : ->
clearInterval @aniInterval
我正在使用coffeescript类来尝试自动化画布的一些基本功能。上面的代码在大多数情况下工作正常,但我真的想开始使用requestanimationframe
而不是setInterval
。
我想使用此处发布的polyfill:https://gist.github.com/1579671
不幸的是我只是没有得到它。如何重写这个类以使其发挥作用并改为使用requestanimationframe
?
答案 0 :(得分:1)
# requestAnimationFrame() shim by Paul Irish
# http://paulirish.com/2011/requestanimationframe-for-smart-animating/
window.requestAnimFrame = (->
window.requestAnimationFrame or window.webkitRequestAnimationFrame or window.mozRequestAnimationFrame or window.oRequestAnimationFrame or window.msRequestAnimationFrame or (callback, element) ->
window.setTimeout callback, 1000 / 60
)()
# Behaves the same as setInterval except uses requestAnimationFrame() where possible for better performance
# @param {function} fn The callback function
# @param {int} delay The delay in milliseconds
window.requestInterval = (fn, delay) ->
return window.setInterval(fn, delay) if not window.requestAnimationFrame and not window.webkitRequestAnimationFrame and not (window.mozRequestAnimationFrame and window.mozCancelRequestAnimationFrame) and not window.oRequestAnimationFrame and not window.msRequestAnimationFrame
start = new Date().getTime()
handle = {}
theLoop = ->
current = new Date().getTime()
delta = current - start
if delta >= delay
fn.call()
start = new Date().getTime()
handle.value = requestAnimFrame(theLoop)
handle.value = requestAnimFrame(theLoop)
return handle
# Behaves the same as clearInterval except uses cancelRequestAnimationFrame() where possible for better performance
# @param {int|object} fn The callback function
window.clearRequestInterval = (handle) ->
(if window.cancelAnimationFrame then window.cancelAnimationFrame(handle.value) else (if window.webkitCancelAnimationFrame then window.webkitCancelAnimationFrame(handle.value) else (if window.webkitCancelRequestAnimationFrame then window.webkitCancelRequestAnimationFrame(handle.value) else (if window.mozCancelRequestAnimationFrame then window.mozCancelRequestAnimationFrame(handle.value) else (if window.oCancelRequestAnimationFrame then window.oCancelRequestAnimationFrame(handle.value) else (if window.msCancelRequestAnimationFrame then window.msCancelRequestAnimationFrame(handle.value) else clearInterval(handle)))))))