canvas 小球碰撞的效果
1、 用canvas实现小球在局部的空间内,不停的滚动效果,代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>小球碰撞</title>
</head>
<style type="text/css">
#myCanvas {
border: 1px solid #000000;
}
</style>
<body>
<canvas id="myCanvas" width="500" height="500">浏览器不支持Canvas</canvas>
</body>
</html>
<script type="text/javascript">
var car = document.getElementById("myCanvas");
var ctx = car.getContext("2d");
var h = 500;
var w = 500;
var x = 100;
var y = 100;
var r = 20;
//水平方向的速度
var speedX = 4;
//垂直方向的速度
var speedY = 3;
var Interval = setInterval(() => {
//改变X的坐标
x = x + speedX;
//当x的位置加上半径大于等于总宽度的时候,代表小球刚好与右边边框相碰
//当x的位置加上半径小于等于0的时候,代表小球刚好与左边边框相碰
if (r + x >= w || x - r <= 0) {
//当判断成立时,代表速度要取相反值,小球才会进行反方向运动
speedX = -speedX;
}
//改变Y的坐标
y = y + speedY;
//当Y的位置加上半径大于等于总高度的时候,代表小球刚好与底边边框相碰
//当Y的位置加上半径小于等于0的时候,代表小球刚好与上边边框相碰
if (r + y >= h || y - r <= 0) {
//当判断成立时,代表速度要取相反值,小球才会进行反方向运动
speedY = -speedY;
}
//清空内容
ctx.clearRect(0, 0, w, h);
motion(x, y, randomHexColor());
}, 10)
function motion(x, y, color) {
ctx.beginPath();
ctx.arc(x, y, r, 0, Math.PI * 2);
ctx.fillStyle = color;
ctx.fill();
ctx.strokeStyle = color;
ctx.stroke();
ctx.closePath();
}
//随机生成十六进制颜色
function randomHexColor() {
//生成ffffff以内16进制数
var hex = Math.floor(Math.random() * 16777216).toString(16);
//while循环判断hex位数,少于6位前面加0凑够6位
while (hex.length < 6) {
hex = '0' + hex;
}
//返回‘#'开头16进制颜色
return '#' + hex;
}
</script>

浙公网安备 33010602011771号