美文网首页
钢琴终极版

钢琴终极版

作者: Victor细节 | 来源:发表于2017-01-12 22:18 被阅读0次
    Paste_Image.png
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title></title>
            <style type="text/css">
                *{
                    margin: 0;
                    padding: 0;
                }
                .face{
                    width: 500px;
                    height: 300px;
                    margin: 0px auto;
                }
                .face ul{
                    list-style-type: none;
                }
                .face li{
                    width: 50px;
                    height: 180px;
                    background-color: orange;
                    float: left;
                    border: 2px solid black;
                    box-shadow: 2px 2px 2px red inset;
                    
                }
                .face li:hover{
                    background-color: darkorange;
                }
                .box{
                    display: none;
                }
                .buttonAll{
                    width: 200px;
                    height: 50px;
                    margin: 100px auto;
                    overflow: hidden;
                }
                .buttonAll input{
                    width: 50px;
                    height: 30px;
                    margin-left: 10px;
                    float: left;
                }
            </style>
        </head>
        <body>
            <div class="buttonAll">
                <input type="button" name="btn" id="btn1" value="录制" />
                <input type="button" name="btn" id="btn2" value="播放" />
            </div>
            <div class="box"></div>
            <div class="face">
                <ul>
                    <li class="key"></li>
                    <li class="key"></li>
                    <li class="key"></li>
                    <li class="key"></li>
                    <li class="key"></li>
                    <li class="key"></li>
                    <li class="key"></li>
                    <li class="key"></li>
                    <li class="key"></li>
                </ul>
            </div>
            <script type="text/javascript">
                
                //添加音频
                var str ="ASDFGHJKL";
                var box = document.querySelector(".box");
                for (var i = 1;i < 10; i++) {
                    box.innerHTML += `
                    <audio class="music" controls="controls">
                        <source src="music/`+ i +`.ogg" type="audio/mp3"></source>
                        <source src="music/`+ i +`.ogg" type="audio/ogg"></source>
                    </audio>`
                }
                
                // 键盘触发部分
                // 创建数据结构
                var keyMap = new Map();
                for (var i = 0; i < str.length; i++ ) {
                    keyMap.set(str.charCodeAt(i),i);
                }
                var musics = document.querySelectorAll(".music");
                var keys = document.querySelectorAll(".key");
                
                //录制音乐
                var musicArr = [];
                var musicTimeArr = [];
                var button1 = document.getElementById("btn1");//录制/停止
                var button2 = document.getElementById("btn2");//播放
                
                playMusic(9);
                //录制/停止
                
                //初始化时间
                var baseTime;
                //控制录音
                var flag = false;
                
                var playFlag = false;
                button1.onclick = function () {
                    if (this.value == "录制") {
                        flag = true;
                        //初始化时间
                        var date = new Date();
                        baseTime = date.getTime();
                        musicArr = [];
                        musicTimeArr = [];
                        this.value = "停止";
                        playFlag = false;
                    }else{
                        flag = false;
                        playFlag = true;
                        this.value = "录制";
                        playFlag = true;
                    }
                }
                //播放按钮
                button2.onclick = function () {
                    if (playFlag) {
                        console.log(musicTimeArr);
                        rePlayer(musicArr);
                    }
                    playFlag = false;
                }
                //实现重新播放
                function rePlayer(arr){
                    for (var i = 0;i < musicTimeArr.length;i++) {
                        (function (i,timeA) {
                            setTimeout(function timer() {
                                musics[musicArr[i]].currentTime = 0;
                                musics[arr[i]].play();
                            },timeA)
                        })(i,musicTimeArr[i]);
                    }
                }
                //实现按键配音
                function playMusic(count){
                    for (var i = 0;i < count; i++) {
                        (function (i) {
                            //鼠标事件触发
                            keys[i].onmousedown = function () {
                                change(i);
                                this.onmouseup = function () {
                                    changeColor ();
                                }
                            };
                        })(i)
                    }
                    //键盘事件触发
                    document.onkeydown = function (e) {
                        var evt = e || window.event;
                        // 获取下标
                        var i = keyMap.get(evt.keyCode);
                        if (i != undefined) {
                            change(i);
                        }
                    }
                    document.onkeyup = function (e) {
                        changeColor ();
                    }
                }
                //实现事件效果
                function change (i) {
                    musics[i].currentTime = 0;
                    musics[i].play();
                    musicArr.push(i);
                    changeColor ();
                    keys[i].style.backgroundColor = "darkorange";
                    //录制时间间隔
                    var date = new Date();
                    var crrentTime = date.getTime()
                    var intervalTime = crrentTime - baseTime;
                    if (flag) {
                        musicTimeArr.push(intervalTime);
                    }
                }
                //颜色还原
                function changeColor () {
                    for (var item of keys) {
                        item.style.backgroundColor = "orange";
                    }
                }
            </script>
        </body>
    </html>

    相关文章

      网友评论

          本文标题:钢琴终极版

          本文链接:https://www.haomeiwen.com/subject/mpejbttx.html