如何通过ES6 class继承实现绚丽小球动画效果?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2357个文字,预计阅读时间需要10分钟。
目录介绍实现步骤创建canvas画布环境编写小球类Ball实现继承Ball类的MoveBall类实例化小球index.js完整代码总结介绍本教程将介绍如何使用HTML5 Canvas和JavaScript创建一个简单的小球游戏。我们将从创建Canvas环境开始,定义小球类,实现小球移动的功能,并展示如何实例化小球和编写完整的JavaScript代码。
实现步骤
1.创建canvas画布环境
2.编写小球类Ball
3.实现继承Ball类的MoveBall类
4.实例化小球
5.index.js完整代码
创建canvas画布环境
编写小球类Balljavascriptclass Ball { constructor(x, y, radius, color) { this.x=x; this.y=y; this.radius=radius; this.color=color; }
draw(context) { context.beginPath(); context.arc(this.x, this.y, this.radius, 0, Math.PI * 2); context.fillStyle=this.color; context.fill(); context.closePath(); }}
实现继承Ball类的MoveBall类javascriptclass MoveBall extends Ball { constructor(x, y, radius, color, dx, dy) { super(x, y, radius, color); this.dx=dx; this.dy=dy; }
move(context) { if (this.x + this.dx > context.canvas.width - this.radius || this.x + this.dx context.canvas.height - this.radius || this.y + this.dy 实例化小球javascriptconst canvas=document.getElementById('gameCanvas');const context=canvas.getContext('2d'); const ball=new MoveBall(50, 50, 10, 'red', 2, 2); index.js完整代码javascript// index.jsconst canvas=document.getElementById('gameCanvas');const context=canvas.getContext('2d'); class Ball { constructor(x, y, radius, color) { this.x=x; this.y=y; this.radius=radius; this.color=color; } draw(context) { context.beginPath(); context.arc(this.x, this.y, this.radius, 0, Math.PI * 2); context.fillStyle=this.color; context.fill(); context.closePath(); }} class MoveBall extends Ball { constructor(x, y, radius, color, dx, dy) { super(x, y, radius, color); this.dx=dx; this.dy=dy; } move(context) { if (this.x + this.dx > context.canvas.width - this.radius || this.x + this.dx context.canvas.height - this.radius || this.y + this.dy const ball=new MoveBall(50, 50, 10, 'red', 2, 2); function animate() { context.clearRect(0, 0, canvas.width, canvas.height); ball.move(context); ball.draw(context); requestAnimationFrame(animate);} animate(); 总结本教程通过Canvas和JavaScript实现了一个小球在画布上移动的效果。通过定义小球类和继承类,我们能够轻松地控制小球的运动。这种方法提高了代码的可读性和可维护性。 本效果采用Canvas画布绘制,再利用class类继承实现,实现的效果鼠标在指定Canvas位置移动,会在当前鼠标的位置产生随机颜色的小球,之后小球会慢慢消失。 效果图示 HTML结构
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>绚丽小球</title>
<style>
#canvas{
margin-left: 100px
}
</style>
</head>
<body>
<canvas id="canvas">你的浏览器不支持canvas</canvas>
<!-- <script src="./underscore-min.js"></script> -->
<!-- underscore 中已有封装好的 _.random函数,引入就可以不用再手动写随机函数 -->
<script src="./index.js"></script>
</body>
</html>
// index.js
// 1、获取当前的画布
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
// 设置画布的大小样式
canvas.width = 1000;
canvas.height = 600;
canvas.style.backgroundColor = '#000'
实例解析 首先,找到 canvas 元素:
const canvas=document.getElementById("myCanvas");
然后,创建 context 对象:
const ctx = canvas.getContext('2d');
设置宽高背景色
// index.js
// 2、小球类
class Ball {
constructor (x, y, color) {
this.x = x; // x轴
this.y = y; // y轴
this.color = color; // 小球的颜色
this.r = 40; // 小球的半径
}
// 绘制小球
render () {
ctx.save();
ctx.beginPath();
ctx.arc(this.x, this.y, this.r , 0, Math.PI * 2);
ctx.fillStyle = this.color;
ctx.fill();
ctx.restore();
}
}
实例解析
// index.js
// 3、会移动小球的类
class MoveBall extends Ball { // 继承
constructor (x, y, color) {
super(x, y, color);
// 量的变化
// 小球的随机坐标
this.dX = Random(-5, 5);
this.dY = Random(-5, 5);
// 半径变小的随机数,因为小球是从一开始大然后慢慢的消失
this.dR = Random(1, 3);
}
// 4、改变小球的位置和半径
upDate () {
this.x += this.dX;
this.y += this.dY;
this.r -= this.dR;
// 判断小球的半径是否小于0
if(this.r < 0) {
this.r = 0 // 半径为0表示小球消失
}
}
}
实例解析
// index.js
// 5、实例化小球
// 存放产生的小球
let ballArr = [];
// 定义随机函数 如果引用了underscore-min.js 就不用写随机函数,可以直接用 _.random
let Random = (min, max) => {
return Math.floor(Math.random() * (max - min) + min);
}
// 监听鼠标的移动
canvas.addEventListener('mousemove', function (e){
// 随机颜色
// 也可以固定颜色数组 let colorArr = ['red', 'green', 'blue', 'yellow', 'orange', 'pink'];
// bgcolor ==> colorArr[Random(0, colorArr.length - 1)]
let bgColor = `rgb(${Random(0,256)}, ${Random(0,256)}, ${Random(0,256)})`;
ballArr.push(new MoveBall(e.offsetX, e.offsetY, bgColor));
console.log(ballArr);
})
// 开启定时器
setInterval(function () {
// 清屏
ctx.clearRect(0, 0, canvas.width, canvas.height);
// 绘制小球
for (let i = 0 ; i < ballArr.length; i++ ) {
ballArr[i].render();
ballArr[i].upDate();
}
}, 50);
实例解析 我们可以看到不清屏小球半径逐渐缩小到最后小球是不会消失的,咋们肯定要的效果不是这样啦!清屏的效果是啥呢?就是文章开头的那个效果啦!(宝,玩得开心哟❤)
// 1、获取当前的画布
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
// 设置画布的大小样式
canvas.width = 1000;
canvas.height = 600;
canvas.style.backgroundColor = '#000'
// 2、小球类
class Ball {
constructor (x, y, color) {
this.x = x;
this.y = y;
this.color = color;
this.r = 40;
}
// 绘制小球
render () {
ctx.save();
ctx.beginPath();
ctx.arc(this.x, this.y, this.r , 0, Math.PI * 2);
ctx.fillStyle = this.color;
ctx.fill();
ctx.restore();
}
}
// 3、会移动小球的类
class MoveBall extends Ball { // 继承
constructor (x, y, color) {
super(x, y, color);
// 量的变化
// 小球的随机坐标
this.dX = Random(-5, 5);
this.dY = Random(-5, 5);
// 半径变小的随机数
this.dR = Random(1, 3);
}
// 4、改变小球的位置和半径
upDate () {
this.x += this.dX;
this.y += this.dY;
this.r -= this.dR;
// 判断小球的半径是否小于0
if(this.r < 0) {
this.r = 0
}
}
}
// 5、实例化小球
// 存放产生的小球
let ballArr = [];
// 定义随机函数 如果引用了underscore-min.js 就不用写随机函数,可以直接用 _.random
let Random = (min, max) => {
return Math.floor(Math.random() * (max - min) + min);
}
// 监听鼠标的移动
canvas.addEventListener('mousemove', function (e){
// 随机颜色
// 也可以固定颜色数组 let colorArr = ['red', 'green', 'blue', 'yellow', 'orange', 'pink'];
// bgcolor ==> colorArr[Random(0, colorArr.length - 1)]
let bgColor = `rgb(${Random(0,256)}, ${Random(0,256)}, ${Random(0,256)})`;
ballArr.push(new MoveBall(e.offsetX, e.offsetY, bgColor));
console.log(ballArr);
})
// 开启定时器
setInterval(function () {
// 清屏
ctx.clearRect(0, 0, canvas.width, canvas.height);
// 绘制小球
for (let i = 0 ; i < ballArr.length; i++ ) {
ballArr[i].render();
ballArr[i].upDate();
}
}, 50);
希望这个小demo能帮大家更熟悉ES6中class类的理解与使用,到此这篇关于如何使用ES6的class类继承来实现绚丽小球效果的文章就介绍到这了,更多相关ES6 class类继承实现小球内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!目录
介绍
实现步骤
创建canvas画布环境
书写小球类Ball
参数
描述
x
圆的中心的 x 坐标。
y
圆的中心的 y 坐标。
r
圆的半径。
sAngle
起始角,以弧度计(弧的圆形的三点钟位置是 0 度)。
eAngle
结束角,以弧度计。
counterclockwise
可选。规定应该逆时针还是顺时针绘图。False = 顺时针,true = 逆时针。
实现继承球类(Ball)的MoveBall类
实例化小球
index.js完整代码
总结
本文共计2357个文字,预计阅读时间需要10分钟。
目录介绍实现步骤创建canvas画布环境编写小球类Ball实现继承Ball类的MoveBall类实例化小球index.js完整代码总结介绍本教程将介绍如何使用HTML5 Canvas和JavaScript创建一个简单的小球游戏。我们将从创建Canvas环境开始,定义小球类,实现小球移动的功能,并展示如何实例化小球和编写完整的JavaScript代码。
实现步骤
1.创建canvas画布环境
2.编写小球类Ball
3.实现继承Ball类的MoveBall类
4.实例化小球
5.index.js完整代码
创建canvas画布环境
编写小球类Balljavascriptclass Ball { constructor(x, y, radius, color) { this.x=x; this.y=y; this.radius=radius; this.color=color; }
draw(context) { context.beginPath(); context.arc(this.x, this.y, this.radius, 0, Math.PI * 2); context.fillStyle=this.color; context.fill(); context.closePath(); }}
实现继承Ball类的MoveBall类javascriptclass MoveBall extends Ball { constructor(x, y, radius, color, dx, dy) { super(x, y, radius, color); this.dx=dx; this.dy=dy; }
move(context) { if (this.x + this.dx > context.canvas.width - this.radius || this.x + this.dx context.canvas.height - this.radius || this.y + this.dy 实例化小球javascriptconst canvas=document.getElementById('gameCanvas');const context=canvas.getContext('2d'); const ball=new MoveBall(50, 50, 10, 'red', 2, 2); index.js完整代码javascript// index.jsconst canvas=document.getElementById('gameCanvas');const context=canvas.getContext('2d'); class Ball { constructor(x, y, radius, color) { this.x=x; this.y=y; this.radius=radius; this.color=color; } draw(context) { context.beginPath(); context.arc(this.x, this.y, this.radius, 0, Math.PI * 2); context.fillStyle=this.color; context.fill(); context.closePath(); }} class MoveBall extends Ball { constructor(x, y, radius, color, dx, dy) { super(x, y, radius, color); this.dx=dx; this.dy=dy; } move(context) { if (this.x + this.dx > context.canvas.width - this.radius || this.x + this.dx context.canvas.height - this.radius || this.y + this.dy const ball=new MoveBall(50, 50, 10, 'red', 2, 2); function animate() { context.clearRect(0, 0, canvas.width, canvas.height); ball.move(context); ball.draw(context); requestAnimationFrame(animate);} animate(); 总结本教程通过Canvas和JavaScript实现了一个小球在画布上移动的效果。通过定义小球类和继承类,我们能够轻松地控制小球的运动。这种方法提高了代码的可读性和可维护性。 本效果采用Canvas画布绘制,再利用class类继承实现,实现的效果鼠标在指定Canvas位置移动,会在当前鼠标的位置产生随机颜色的小球,之后小球会慢慢消失。 效果图示 HTML结构
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>绚丽小球</title>
<style>
#canvas{
margin-left: 100px
}
</style>
</head>
<body>
<canvas id="canvas">你的浏览器不支持canvas</canvas>
<!-- <script src="./underscore-min.js"></script> -->
<!-- underscore 中已有封装好的 _.random函数,引入就可以不用再手动写随机函数 -->
<script src="./index.js"></script>
</body>
</html>
// index.js
// 1、获取当前的画布
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
// 设置画布的大小样式
canvas.width = 1000;
canvas.height = 600;
canvas.style.backgroundColor = '#000'
实例解析 首先,找到 canvas 元素:
const canvas=document.getElementById("myCanvas");
然后,创建 context 对象:
const ctx = canvas.getContext('2d');
设置宽高背景色
// index.js
// 2、小球类
class Ball {
constructor (x, y, color) {
this.x = x; // x轴
this.y = y; // y轴
this.color = color; // 小球的颜色
this.r = 40; // 小球的半径
}
// 绘制小球
render () {
ctx.save();
ctx.beginPath();
ctx.arc(this.x, this.y, this.r , 0, Math.PI * 2);
ctx.fillStyle = this.color;
ctx.fill();
ctx.restore();
}
}
实例解析
// index.js
// 3、会移动小球的类
class MoveBall extends Ball { // 继承
constructor (x, y, color) {
super(x, y, color);
// 量的变化
// 小球的随机坐标
this.dX = Random(-5, 5);
this.dY = Random(-5, 5);
// 半径变小的随机数,因为小球是从一开始大然后慢慢的消失
this.dR = Random(1, 3);
}
// 4、改变小球的位置和半径
upDate () {
this.x += this.dX;
this.y += this.dY;
this.r -= this.dR;
// 判断小球的半径是否小于0
if(this.r < 0) {
this.r = 0 // 半径为0表示小球消失
}
}
}
实例解析
// index.js
// 5、实例化小球
// 存放产生的小球
let ballArr = [];
// 定义随机函数 如果引用了underscore-min.js 就不用写随机函数,可以直接用 _.random
let Random = (min, max) => {
return Math.floor(Math.random() * (max - min) + min);
}
// 监听鼠标的移动
canvas.addEventListener('mousemove', function (e){
// 随机颜色
// 也可以固定颜色数组 let colorArr = ['red', 'green', 'blue', 'yellow', 'orange', 'pink'];
// bgcolor ==> colorArr[Random(0, colorArr.length - 1)]
let bgColor = `rgb(${Random(0,256)}, ${Random(0,256)}, ${Random(0,256)})`;
ballArr.push(new MoveBall(e.offsetX, e.offsetY, bgColor));
console.log(ballArr);
})
// 开启定时器
setInterval(function () {
// 清屏
ctx.clearRect(0, 0, canvas.width, canvas.height);
// 绘制小球
for (let i = 0 ; i < ballArr.length; i++ ) {
ballArr[i].render();
ballArr[i].upDate();
}
}, 50);
实例解析 我们可以看到不清屏小球半径逐渐缩小到最后小球是不会消失的,咋们肯定要的效果不是这样啦!清屏的效果是啥呢?就是文章开头的那个效果啦!(宝,玩得开心哟❤)
// 1、获取当前的画布
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
// 设置画布的大小样式
canvas.width = 1000;
canvas.height = 600;
canvas.style.backgroundColor = '#000'
// 2、小球类
class Ball {
constructor (x, y, color) {
this.x = x;
this.y = y;
this.color = color;
this.r = 40;
}
// 绘制小球
render () {
ctx.save();
ctx.beginPath();
ctx.arc(this.x, this.y, this.r , 0, Math.PI * 2);
ctx.fillStyle = this.color;
ctx.fill();
ctx.restore();
}
}
// 3、会移动小球的类
class MoveBall extends Ball { // 继承
constructor (x, y, color) {
super(x, y, color);
// 量的变化
// 小球的随机坐标
this.dX = Random(-5, 5);
this.dY = Random(-5, 5);
// 半径变小的随机数
this.dR = Random(1, 3);
}
// 4、改变小球的位置和半径
upDate () {
this.x += this.dX;
this.y += this.dY;
this.r -= this.dR;
// 判断小球的半径是否小于0
if(this.r < 0) {
this.r = 0
}
}
}
// 5、实例化小球
// 存放产生的小球
let ballArr = [];
// 定义随机函数 如果引用了underscore-min.js 就不用写随机函数,可以直接用 _.random
let Random = (min, max) => {
return Math.floor(Math.random() * (max - min) + min);
}
// 监听鼠标的移动
canvas.addEventListener('mousemove', function (e){
// 随机颜色
// 也可以固定颜色数组 let colorArr = ['red', 'green', 'blue', 'yellow', 'orange', 'pink'];
// bgcolor ==> colorArr[Random(0, colorArr.length - 1)]
let bgColor = `rgb(${Random(0,256)}, ${Random(0,256)}, ${Random(0,256)})`;
ballArr.push(new MoveBall(e.offsetX, e.offsetY, bgColor));
console.log(ballArr);
})
// 开启定时器
setInterval(function () {
// 清屏
ctx.clearRect(0, 0, canvas.width, canvas.height);
// 绘制小球
for (let i = 0 ; i < ballArr.length; i++ ) {
ballArr[i].render();
ballArr[i].upDate();
}
}, 50);
希望这个小demo能帮大家更熟悉ES6中class类的理解与使用,到此这篇关于如何使用ES6的class类继承来实现绚丽小球效果的文章就介绍到这了,更多相关ES6 class类继承实现小球内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!目录
介绍
实现步骤
创建canvas画布环境
书写小球类Ball
参数
描述
x
圆的中心的 x 坐标。
y
圆的中心的 y 坐标。
r
圆的半径。
sAngle
起始角,以弧度计(弧的圆形的三点钟位置是 0 度)。
eAngle
结束角,以弧度计。
counterclockwise
可选。规定应该逆时针还是顺时针绘图。False = 顺时针,true = 逆时针。
实现继承球类(Ball)的MoveBall类
实例化小球
index.js完整代码
总结

