当前位置 : 主页 > 网络编程 > JavaScript >

html5 canvas 动画:有20根轮条的转动轮

来源:互联网 收集:自由互联 发布时间:2021-07-03
原创。 每根轮条画作一个貌似箭头的多边形。 注意:在表示多边形顶点的坐标中,必须包含一个整型变量(d)。这样随d增减,多边形也增大或缩小,以获得物体渐远或渐近的视觉效果。
原创。
每根轮条画作一个貌似箭头的多边形。
注意:在表示多边形顶点的坐标中,必须包含一个整型变量 (d) 。这样随d增减,多边形也增大或缩小,以获得物体渐远或渐近的视觉效果。
演示:
http://runjs.cn/detail/iszznh6d

1. [代码][JavaScript]代码    

<html >
<head>
<title>转轮</title>
<meta charset="utf-8">
<script>
var d=150;
var large=0;

var x0=d*2;
var y0=d*1.8;
    /* 每根轮条画作一个貌似箭头的多边形。多边形顶点位置,
     * 按逆时针旋转,依次用x和y整型数组表示。 */
var x =new Array( d/30, d/30, d/7.5,   0, -d/7.5,  -d/30,-d/30);
var y =new Array(0,-d*1.33,-d*1.33,-d*1.66,-d*1.33,-d*1.33, 0);

var color =new Array(20); //准备为20根轮条配颜色

function createColor(){
    for (var i=0;i<20;i++)
    color[i]=randomColor();
}

function randomColor(){ 
var s ="#";
for (var i=0;i<3;i++)
s += Math.floor(Math.random()*16).toString(16);
return s;
}

var xLeft=0;
var eastwards=1;

function shiftPolygon(){
if (xLeft==550) eastwards=0;
if (xLeft==0) eastwards=1;
if (eastwards==1) xLeft++;
else xLeft--;
document.getElementById("polygon").style.left=xLeft +"px";
}

function locate(){
var canvas =document.getElementById("polygon");  
var g2D =canvas.getContext("2d"); 
g2D.translate(x0,y0);
}
function fillPolygon(x,y, color, ctx){
    ctx.beginPath();
    ctx.moveTo(x[0],y[0]);
for(var i=1; i<x.length; i++)
    ctx.lineTo(x[i],y[i]);
    ctx.closePath();
    ctx.fillStyle=color;
    ctx.fill();
}

function wheel(){
var canvas =document.getElementById("polygon");  
var g2D =canvas.getContext("2d"); 
g2D.clearRect(-300,-300,600,600);
var x =new Array( d/30, d/30, d/7.5,   0, -d/7.5,  -d/30,-d/30);
var y =new Array(0,-d*1.33,-d*1.33,-d*1.66,-d*1.33,-d*1.33, 0);
for (var i=0;i<20;i++){
        fillPolygon(x,y, color[i], g2D);
        g2D.rotate(Math.PI/10);
    }
g2D.beginPath();
g2D.arc(0,0,d*1.73,0,2*Math.PI);
g2D.lineWidth=d/7.5;
g2D.strokeStyle="brown";
g2D.stroke();
if (eastwards==1)    
g2D.rotate(Math.PI/100);
else if (eastwards==0)
g2D.rotate(-Math.PI/100);
if (d==50) large=1;
if (d==150) large=0;

if (large==1)
d++; 
if (large==0)
d--;
}

function preparation(){
    createColor();
    locate();
    setInterval('wheel()',50);
    setInterval('shiftPolygon()',50);    
}
</script>
<style>
#polygon{
    position:absolute; 
    left:0px;
    top:0px;
    z-index:5;
}
</style>
</head>

<body onLoad="preparation()"> 
<canvas id="polygon" width="600" height="700" >  
         <p>Your browserdoes not support the canvas element!</p>
</canvas> 
</body>
</html>

2. [图片] rotating_wheel.png    

网友评论