canvas气泡效果

<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        html,
        body {
            height: 100%;
        }
    </style>
</head>

<body>
    <canvas id="canvas">
        您的浏览器不支持canvas,请更换谷歌浏览器
    </canvas>
    <script>
        if (canvas.getContext) {
            canvas.width = document.documentElement.clientWidth
            canvas.height = document.documentElement.clientHeight
            canvas.style.backgroundColor = 'white'
            document.title = "全屏气泡"
            const ctx = canvas.getContext('2d')
            // 声明变量
            let radius = 20,
                r,
                g,
                b,
                a,
                x,
                y,
                arr = [],
                temp = []
            for (let i = 0; i < 5; i++) {
                arc()
            }
            // 监听点击事件
            canvas.addEventListener('click', event => {
                console.log("点击了canvas:", event);
                x = event.offsetX
                y = event.offsetY
                radius = 5
                arc(x, y, radius)
            })
            // 定时刷新canvas
            setInterval(() => {
                ctx.clearRect(0, 0, canvas.width, canvas.height)
                arr.forEach((item, index) => {
                    if (item.a <= 0) {
                        temp.push(index)
                    } else {
                        item.radius += 0.5
                        item.a -= 0.005
                    }
                    draw(item.radius, item.r, item.g, item.b, item.a, item.x, item.y)
                })
                arr = arr.filter(item => {
                    return item.a > 0
                })
            }, 1000 / 60);
            // 定时添加新的气泡
            setInterval(() => {
                arc()
            }, 500);
            // 画气泡
            function draw(radius, r, g, b, a, x, y) {
                ctx.beginPath()
                ctx.arc(x, y, radius, 0, 2 * Math.PI)
                ctx.fillStyle = `rgba(${r},${g},${b},${a})`
                ctx.fill()
            }
            // 气泡数据
            function arc(x, y, radius) {
                r = arcRandomColor()
                g = arcRandomColor()
                b = arcRandomColor()
                radius = radius || Math.ceil(Math.random() * 10)
                x = x || Math.ceil(Math.random() * canvas.width)
                y = y || Math.ceil(Math.random() * canvas.height)
                a = 1
                const temp = {
                    r,
                    g,
                    b,
                    a,
                    x,
                    y,
                    radius
                }
                arr.push(temp)
            }
            // 随机数据
            function arcRandomColor() {
                return Math.ceil(Math.random() * 254)
            }
        }
    </script>
</body>

</html>
posted @ 2021-11-30 10:34  走我们钓鱼去  阅读(218)  评论(0编辑  收藏  举报