canvas 实现满屏移动小球

canvas实现跳动小球

html部分
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .root {
            width: 100%;
            height: 600px;
            background-color: black;
            display: flex;
            justify-content: center;
            align-items: center;
            flex-direction: column;
        }

        .root canvas {
            background-color: rgb(0, 0, 0);
        }
    </style>
</head>

<body>
    <div class="root">
        <canvas id='canvas' width="1000" height="500"></canvas>
    </div>
    <script src="./canvas_3.js"></script>
</body>

</html>

js部分
class Animate {
    constructor(id) {
        this.id = id
        this.balls = []
        this.canvas = document.getElementById(this.id)
        this.context = this.canvas.getContext('2d')
        this._init_()
    }

    _init_() {
        for (let i = 0; i < 400; i++) {
            let x = Math.floor(Math.random() * (600 - 30)) + 30
            let y = Math.floor(Math.random() * (400 - 20)) + 20
            let dx = Math.floor(Math.random() * (4 - 2)) + 2
            let dy = Math.floor(Math.random() * (4 - 2)) + 2
            let radius = Math.floor(Math.random() * (20 - 10)) + 10
            let color = `rgb(${Math.floor(Math.random() * (255 - 0) + 0)}, ${Math.floor(Math.random() * (255 - 0) + 0)}, ${Math.floor(Math.random() * (255 - 0) + 0)})`
            this.balls.push(new Ball(x, y, dx, dy, radius, color))

        }
        this.animate()
    }

    animate() {
        requestAnimationFrame(this.animate.bind(this))
        this.context.clearRect(0, 0, this.canvas.width, this.canvas.height)
        for (let i = 0; i < 400; i++) {
            this.balls[i].move()
        }

    }
}

class Ball {
    constructor(x, y, dx, dy, radius, color) {
        this.x = x
        this.y = y
        this.dx = dx
        this.dy = dy
        this.radius = radius
        this.color = color
        this.canvas = document.getElementById('canvas')
        this.context = this.canvas.getContext('2d')
        this.drawBall()
    }

    drawBall() {
        this.context.beginPath();
        this.context.arc(this.x, this.y, this.radius, Math.PI / 180 * 0, Math.PI / 180 * 2, true);
        this.context.fillStyle = this.color;
        this.context.fill()
    }

    move() {
        if (this.x + this.radius > this.canvas.width || this.x - this.radius < 0) {
            this.dx = -this.dx
        }

        if (this.y + this.radius > this.canvas.height || this.y - this.radius < 0) {
            this.dy = -this.dy
        }

        this.x += this.dx
        this.y += this.dy
        this.drawBall()
    }
}


new Animate('canvas')

posted @ 2020-09-08 14:26  boyyang  阅读(360)  评论(0编辑  收藏  举报
//黑猫咪:https://unpkg.com/live2d-widget-model-hijiki@1.0.5/assets/hijiki.model.json //白猫咪:https://unpkg.com/live2d-widget-model-tororo@1.0.5/assets/tororo.model.json //萌娘:https://unpkg.com/live2d-widget-model-shizuku@1.0.5/assets/shizuku.model.json //狗狗:https://unpkg.com/live2d-widget-model-wanko@1.0.5/assets/wanko.model.json //萌妹1号:https://unpkg.com/live2d-widget-model-z16@1.0.5/assets/z16.model.json //萌妹2号:https://unpkg.com/live2d-widget-model-koharu@1.0.5/assets/koharu.model.json //萌妹3号:https://unpkg.com/live2d-widget-model-hibiki@1.0.5/assets/hibiki.model.json //妹子4号:https://unpkg.com/live2d-widget-model-izumi@1.0.5/assets/izumi.model.json //妹子5号:https://unpkg.com/live2d-widget-model-miku@1.0.5/assets/miku.model.json //6号:https://unpkg.com/live2d-widget-model-nico@1.0.5/assets/nico.model.json //7号:https://unpkg.com/live2d-widget-model-ni-j@1.0.5/assets/ni-j.model.json //8号:https://unpkg.com/live2d-widget-model-nipsilon@1.0.5/assets/nipsilon.model.json //9号:https://unpkg.com/live2d-widget-model-nito@1.0.5/assets/nito.model.json //10号:https://unpkg.com/live2d-widget-model-tsumiki@1.0.5/assets/tsumiki.model.json //11号:https://unpkg.com/live2d-widget-model-unitychan@1.0.5/assets/unitychan.model.json //帅哥1号:https://unpkg.com/live2d-widget-model-chitose@1.0.5/assets/chitose.model.json //帅哥2号:https://unpkg.com/live2d-widget-model-haruto@1.0.5/assets/haruto.model.json