【发布时间】:2011-12-28 14:56:35
【问题描述】:
我正在尝试实现 in this question 提到的那种 wating 动画,特别是看起来像这样的东西:
但我不想使用图形文件,并试图纯粹在 html5 画布和 javascript 中实现它。另外,我想要一个圆形的黑色背景而不是方形的。作为第一步,我尝试绘制一个静态框架(没有任何移动/旋转)并这样做:
<html>
<head><script>
window.onload = function(){
var c=document.getElementById("waiting").getContext("2d");
c.lineCap="round";
c.fillStyle="#353535";
c.translate(100,100);
function slit(p){
shade = 256*p;
th = 2*Math.PI*p;
cos = Math.cos(th);
sin = Math.sin(th);
c.strokeStyle = '#'+((shade<<16)+(shade<<8)+shade).toString(16);
c.moveTo(55*cos, 55*sin);
c.lineTo(84*cos, 84*sin);
c.stroke();
c.closePath();
}
c.lineWidth=0;
c.arc(0,0,100,0,Math.PI*2);
c.fill();
c.lineWidth=7;
for(var i = 0;i<1;i+=0.05){slit(i);}
}
</script></head>
<body><canvas id="waiting" width=200 height=200></canvas></body>
</html>
我得到的结果是:
问题在于,lineCap="round" 不适用于所有“狭缝”,lineWidth=0 属性不适用于圆的边缘。我究竟做错了什么?我用 Chrome 16.0.912.63 和 Firefox 10.0 进行了检查,得到了类似的结果。
对于下一步,我将让上面创建的部分函数与之交互
window.animationFrames = (function(callback){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback){window.setTimeout(callback, 1000 / 60);};
})();
不过暂时,我需要先解决这个问题。
【问题讨论】:
-
这里有一个 jQuery 插件可以做同样的事情:fgnass.github.com/spin.js,但是你想把它作为一种学习体验,那很酷
-
@asawilliams 我明白了。感谢您的链接。我不想依赖外部库,但我会看看它。也许我可以提取和研究它的相关部分。但是,我仍然想知道为什么我上面的代码不能按预期工作。
-
@asailliams 您链接的实现似乎可以在没有 jQuery 的情况下工作。我会更深入地研究它。
-
fwiw,@asawilliams 提供的链接不需要 jQuery 或 Zepto,但如果它们通过创建插件存在,则它支持它们。但是,如果您不想要依赖项,可以使用核心 API。
标签: javascript html canvas