美文网首页我爱编程
实现简易音乐播放器-PartOne

实现简易音乐播放器-PartOne

作者: Gettingjie | 来源:发表于2018-06-10 22:04 被阅读0次

    基础

      HTML5 提供了 <audio> 标签来实现了前端对音乐媒体的原生支持,并且也提供了支持 JavaScript 操作 <audio> 对象的方法。使得前端不在需要类似于 Flash 的其它插件才能实现对音乐媒体的操作。
      [参考]: https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/audio
      本例中 <audio> 对象用到的方法和属性有:
       play() : 使音乐媒体文件播放。
       pause() : 使音乐媒体文件的播放暂停。
       duration : 返回音乐媒体文件的时长(秒)。
       currentTime : 返回音乐媒体文件当前的播放时间或设置当前的播放跳转时间。

    实现基础样式以及播放控制

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>MusicControl</title>
        <style>
            html {
                box-sizing: border-box;
            }
    
            *,
            *::before,
            *::after {
                box-sizing: inherit;
            }
    
    
            .control-button {
                margin-top: 10px;
                margin-left: 20px;
            }
    
            .control-button::after {
                content: '';
                display: block;
                clear: both;
            }
    
            .play-control-button {
                width: 64px;
                height: 64px;
                background-image: url(icons.png);
                float: left;
                margin-right: 10px;
                cursor: pointer;
            }
    
            .prev {
                background-position: 0 0;
            }
    
            .next {
                background-position: 0 -64px;
            }
    
            .play {
                background-position: 0 -192px;
            }
    
            .pause {
                background-position: 0 -128px;
            }
            
    
            .control-bar {
                margin-top: 20px;
                margin-left: 20px;
            }
    
            .control-bar::after {
                content: '';
                display: block;
                clear: both;
            }
    
            .controlTime {
                float: left;
                color: #ccc;
            }
    
            .play-control-progress {
                margin-left: 4px;
                margin-right: 4px;
                margin-top: 8px;
                float: left;
                display: block;
                width: 300px;
                height: 5px;
                background-color: #ccc;
            }
    
        </style>
    </head>
    <body>
        <audio id="music" src="demo.mp3"></audio>
        <div class="control-button">
            <div class="play-control-button prev" id="controlOne"></div>
            <div class="play-control-button play" id="controlTwo"></div>
            <div class="play-control-button next" id="controlThree"></div>
        </div>
        <div class="control-bar">
            <span class="controlTime" id="beginTime">00:00</span>
            <div class="play-control-progress" id="controlProgress"></div>
            <span class="controlTime" id="endTime">99:99</span>
        </div>
        
        <script>
            let music = document.getElementById('music');
            let controlOne = document.getElementById('controlOne');
            let controlTwo = document.getElementById('controlTwo');
            let controlThree = document.getElementById('controlThree');
            let controlProgress = document.getElementById('controlProgress');
    
            controlTwo.addEventListener('click', () => {
                if(controlTwo.className == "play-control-button play") {
                    controlTwo.className = "play-control-button pause"
                    music.play();
                } else if (controlTwo.className == "play-control-button pause") {
                    controlTwo.className = "play-control-button play";
                    music.pause();
                }
            })
        </script>
    </body>
    </html>
    

      按钮的素材都集中在一张整图中,用 CSS-Sprite 来选择按钮各自的小图片。


    icons.png

      CSS中的 box-sizing: border-box; 使得盒子模型的widthheight 不会受到 paddingborder 等属性的影响。
      [参考]: http://caibaojian.com/30-seconds-of-css/#box-sizing-reset
      
      通过 <audio> 对象的 play()pause() 方法来控制音乐的播放,通过改变元素 className 的方法来控制样式的切换。
      
      

    相关文章

      网友评论

        本文标题:实现简易音乐播放器-PartOne

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