±à¼ÍƼö:
±¾ÎÄÀ´×ÔÓÚ²©¿Í
,±¾ÎÄHTML5 CanvasµÄʹÓÃѧϰ×ܽáϵÁÐÖ®Ò»£¬¶¯»µÄʵÏÖ£¬ÒÔµ¯ÌøÐ¡ÇòΪÀý¡£
1£¬CanvasʵÏÖ¶¯»µÄÔÀí
£¨1£©Ê×ÏÈÉèÖÃÒ»¸ö¶¨Ê±Æ÷£¬·´¸´µ÷ÓûæÍ¼º¯Êý£¨Ò»°ãÿÃë30~40´Î£©¡£Ã¿´Îµ÷Ó㬶¼»áÖØ»æÕû¸ö»²¼¡£Íê³ÉºóµÄЧ¹û¾ÍÏñ¶¯»Ò»Ñù£¬Ã¿Ò»Ö¡¼ä¹ý¶É»áƽ»¬¶øÁ÷³©¡£
£¨2£©ÓÐÁ½ÖÖ·½·¨¶¼¿ÉÒÔʵÏÖÖØ¸´»æÖÆ£ºsetTimeout()ºÍsetInterval()¡£ÓÃÄĸö¿ÉÒÔ×ÔÐоö¶¨¡£
£¨3£©setInterval() Äܱ£Ö¤¾«È·µØ°´Ê±Öػ棬µ±ÓÖ¿ÉÄÜÒò´ËÎþÉüÐÔÄÜ£¨Èç¹û»æÍ¼´úÂëÖ´ÐÐʱ¼ä±ÈÉ趨ʱ¼ä»¹Òª³¤£¬ä¯ÀÀÆ÷½«ºÜÄѸúÉÏ£¬Ëæ×Å»æÍ¼´úÂëµÄÁ¬ÐøÖ´ÐУ¬Ò³Ãæ»á³öÏÖ¶ÌÔݵØÍ£¶Ù£©
£¨4£©±¾ÀýʹÓà setTimeout()£¬ÆäÔËÐеȴýʱ¼äÉèΪ20ºÁÃ루Õâ¸öÊǵäÐ͵͝»ÑÓ³Ùʱ¼ä£©¡£
2£¬Ð¡Çòµ¯Ìø¶¯»
£¨1£©µã»÷¡°Ìí¼ÓСÇò¡±°´Å¥£¬»áÔÚ»²¼ÉÏÌí¼ÓÒ»¸öСÇò¡£
£¨2£©Ìí¼ÓµÄСÇò»áÏòÓÒÏÂ×ö×ÔÓÉÂäÌåÔ˶¯£¬Åöµ½µØ°å¡¢Ç½±Úºó»á·´µ¯¡£Í¬Ê±Ã¿´Î·´µ¯»áÊܵ½×èÁ¦µÄÓ°Ï죬ÉÔÉÔ¼õÉÙËÙ¶È¡£
£¨3£©Êó±êµã»÷ÈÎÒâСÇò£¬»áÈøÃСÇòͻȻ¼ÓËÙ£¬ÈÃËüÏòij¸ö·½Ïòµ¯¿ª¡£
£¨4£©µã»÷¡°Çå¿Õ»²¼¡±°´Å¥£¬»áÇå³ýÒ³ÃæÉϵÄËùÓÐСÇò¡£
Ìí¼ÓСÇò
Çå¿Õ»²¼
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>hangge.com</title>
<style>
canvas {
cursor: pointer;
border: 1px solid black;
}
</style>
<script>
// ÓÃÓÚ±íʾÇòµÄËùÓÐϸ½ÚµÄBallº¯Êý
function Ball(x, y, dx, dy, radius) {
this.x = x;
this.y = y;
this.dx = dx;
this.dy = dy;
this.radius = radius;
this.strokeColor = "black";
this.fillColor = "red";
}
// Õâ¸öÊý×éÓÃÓÚ±£´æ»²¼ÉϳöÏÖµÄËùÓÐÇò
var balls = [];
var canvas;
var context;
window.onload = function() {
canvas = document.getElementById("canvas");
context = canvas.getContext("2d");
canvas.onmousedown = canvasClick;
// ÿ0.02Ãë»æÖÆÒ»´Î»²¼
setTimeout(drawFrame, 20);
};
function addBall() {
// СÇò°ë¾¶
var radius = 20;
// ´´½¨ÐµÄball¶ÔÏó
var ball = new Ball(50,50,1,1,radius);
// ½«Æä±£´æÔÚballsÊý×éÖÐ
balls.push(ball);
}
function clearBalls() {
// ɾ³ýËùÓÐÇò¶ÔÏó
balls = [];
}
function drawFrame() {
// Çå³ý»²¼
context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
// Ñ»·ËùÓеÄÇò
for(var i=0; i<balls.length; i++) {
// °Ñÿ¸öÇòÒÆ¶¯µ½ÐµÄλÖÃ
var ball = balls[i];
ball.x += ball.dx;
ball.y += ball.dy;
// Ìí¼ÓÖØÁ¦×÷ÓõÄЧ¹û£¬ÈÃÇò¼ÓËÙÏÂÂä
if ((ball.y) < canvas.height) ball.dy += 0.22;
// Ìí¼ÓĦ²ÁÁ¦×÷ÓõÄЧ¹û£¬¼õÂý×óÓÒÒÆ¶¯ËÙ¶È
ball.dx = ball.dx * 0.998;
// Èç¹ûÇòÅöµ½Ä³Ò»±ß£¬¾Í·´µ¯»ØÀ´
if ((ball.x + ball.radius > canvas.width) || (ball.x - ball.radius < 0)) {
ball.dx = -ball.dx;
}
// Èç¹ûÇòÅöµ½µ×²¿£¬·´µ¯»ØÀ´£¬µ«ÂýÂýµØ¼õËÙ
if ((ball.y + ball.radius > canvas.height) || (ball.y - ball.radius < 0)) {
ball.dy = -ball.dy*0.96;
}
context.beginPath();
context.fillStyle = ball.fillColor;
// »æÖÆÇò
context.arc(ball.x, ball.y, ball.radius, 0, Math.PI*2);
context.lineWidth = 1;
context.fill();
context.stroke();
}
// 20ºÁÃëºó»æÖÆÏÂÒ»Ö¡
setTimeout(drawFrame, 20);
}
function canvasClick(e) {
// »ñÈ¡µã»÷µÄ×ø±ê
var clickX = e.pageX - canvas.offsetLeft;
var clickY = e.pageY - canvas.offsetTop;
// ÕÒµ½µãÖеÄСÇò
for(var i in balls)
{
var ball = balls[i];
if ((clickX > (ball.x-ball.radius)) && (clickX < (ball.x+ball.radius)))
{
if ((clickY > (ball.y-ball.radius)) && (clickY < (ball.y+ball.radius)))
{
// ¸Ä±äµã»÷µÄСÇòËÙ¶È
ball.dx -= 2;
ball.dy -= 3;
return;
}
}
}
}
</script>
</head>
<body>
<canvas id="canvas" width="400" height="300">
</canvas>
<div>
<button onclick="addBall()">Ìí¼ÓСÇò</button>
<button onclick="clearBalls()">Çå¿Õ»²¼</button>
</div>
</body>
</html>