原创。 每根轮条画作一个貌似箭头的多边形。 注意:在表示多边形顶点的坐标中,必须包含一个整型变量(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>
