window.requestAnimFrame = (function(){ //浏览器的兼容设置
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(/* function */ callback, /* DOMElement */ element){
window.setTimeout(callback, 1000 / 60); //定义每秒执行60次动画
};
})();
window.onload = function() {
var c=document.getElementById("myCanvas");
var img=new Image();
var imgList=[];
var n = 0;
ctx=c.getContext('2d');
for(var i=16;i<=220;i++){
if(56>=i||i>=84){
var src_="/test/images/story/"+i+".jpg"
imgList.push(src_);
}
}
// var t = setInterval(video,66)
(function video(){
img.src = imgList[n];
img.onload = function () //确保图片已经加载完毕
{
ctx.drawImage(img,0,0,608,1080);
}
n++;
// if(n>=imgList.length){
// clearInterval(t)
// }
window.requestAnimFrame(video);
})()
}
设置不了速度也不会停止。。。求解。。,最上面那个1000/60改了不行。。
最上边那堆代码是polyfill,主要是通过更换各种
requestAnimationFrame
私有前缀的形式,为不支持原生无前缀写法的浏览器提供兼容性适配(各浏览器实现新功能时通常会有自己的前缀版本实现),最后如果真的都不支持,那说明确实不支持rAF,那么就换成setTimeout
来模拟实现。而由于rAF是固定的1秒60次(目的是同步显示器的刷新率),所以后边setTimeout
才会出现1000/60
这种写法,也就是说,它的执行速度是固定的。想要停掉的话,跟
setTimeout
有那么一点点像,只需要使用cancelAnimationFrame
,把之前调用requestAnimationFrame
时返回的id当做前者的参数去执行就好了,具体的你参考这里吧。另外,建议去github上找成熟的polyfill来用。