zoukankan      html  css  js  c++  java
  • canvas 音乐跳动效果

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
            <title></title>
            <style type="text/css">
                * {margin: 0;padding: 0;}
                html, body {height: 100%;overflow: hidden;}
                .music-play {margin: 100px;}
            </style>
        </head>
        <body>
            <div class="music-play">
                <canvas width="200" height="100"></canvas>
            </div>
        </body>
        <script type="text/javascript">
            window.onload = function() {
                const oc = document.querySelector('canvas');
                if (oc.getContext('2d')) {
                    const ctx = oc.getContext('2d');
                    
                    const lineArr = [
                        {
                            start: {
                                x: 40,
                            },
                            end: {
                                x: 40,
                                y: 60
                            }
                        },
                        {
                            start: {
                                x: 80
                            },
                            end: {
                                x: 80,
                                y: 80
                            }
                        },
                        {
                            start: {
                                x: 120
                            },
                            end: {
                                x: 120,
                                y: 100
                            }
                        },
                        {
                            start: {
                                x: 160
                            },
                            end: {
                                x: 160,
                                y: 120
                            }
                        }
                    ];
    
                    
                    function step() {
                        ctx.clearRect(0, 0, oc.width, oc.height);
                        ctx.save();
                        ctx.fillStyle = "#000";
                        ctx.fillRect(0, 0, oc.width, oc.height);
                        ctx.restore();
                        
                        for (let i = 0; i < lineArr.length; i++) {
                            if (lineArr[i].end.y >= oc.height - 30) {
                                lineArr[i].end.dir = 'add';
                            } else if (lineArr[i].end.y <= 30) {
                                lineArr[i].end.dir = 'minus';
                            }
                            
                            if (lineArr[i].end.dir === 'minus') {
                                lineArr[i].end.y += 2;
                            } else {
                                lineArr[i].end.y -= 2;
                            }
                        }
                        
                        for (let i = 0; i < lineArr.length; i++) {
                            ctx.save();
                            // ctx.beginPath();
                            // ctx.strokeStyle = 'yellow';
                            // ctx.moveTo(lineArr[i].start.x, oc.height);
                            // ctx.lineTo(lineArr[i].end.x, oc.height - lineArr[i].end.y);
                            
                            ctx.fillStyle = "yellow";
                            ctx.fillRect(lineArr[i].start.x, oc.height - lineArr[i].end.y, 5, lineArr[i].end.y);
                            
                            // ctx.stroke();
                            ctx.restore();
                        }
                        
                        window.requestAnimationFrame(step);
                    }
                    
                    window.requestAnimationFrame(step);
                }
            }
        </script>
    </html>

  • 相关阅读:
    Sicily 1153. 马的周游问题 解题报告
    回溯法与八皇后问题
    Sicily 1151. 魔板 解题报告
    Sicily 1176. Two Ends 解题报告
    Sicily 1046. Plane Spotting 解题报告
    Java多线程11:ReentrantLock的使用和Condition
    Java多线程10:ThreadLocal的作用及使用
    Java多线程9:ThreadLocal源码剖析
    Java多线程8:wait()和notify()/notifyAll()
    Java多线程7:死锁
  • 原文地址:https://www.cnblogs.com/qiuxd/p/13048354.html
Copyright © 2011-2022 走看看