zoukankan      html  css  js  c++  java
  • js——封装音频播放 暂停

    此技术分享是在项目过程中处理音频、播放、暂停并添加动效时开发出来的,还有待代码精简,技术提高。不过基本功能完善具备实际项目的套用具体演示如下:

    html部分(这里我们模拟是三大框架的vue)

    <div class="box">
                <ul ref="ul"  class="ul">
                    <span class="a" ref="span" @click="key(v,i)" v-for="(v,i) in obj">{{v.name}}</span>
                </ul>
            </div>
            <audio  controls="controls" ></audio>

    css部分

    *{
                margin:0;
                padding: 0;
                list-style: none;
            }
            body{
                height: 80vh;
                display: flex;
                justify-content: center;
                align-items: center;
            }
            .box{
                 300px;
                height: 600px;
                border: 1px solid red;
                box-sizing: border-box;
                overflow: auto;
            }
            span{
                display: block;
                 100%;
                text-align: center;
                line-height: 50px;
                background: cadetblue;
            }
            .red{
                background: red;
            }

    js部分:

    在创建vue实例之前创建一个audio实例Au构造函数是本次的关键

    var au_do = new Au(document.querySelectorAll('audio')[0],'red');//创建au_io实例传入audio标签和想要音频播放时要加入的class
    methods : {
                key(v,i){//点击播放或者暂停
                    this.$nextTick(()=>{
                        var skr = this.$refs['span'];
                        this.ar = i;
                        au_do.plays(skr,i,v);//这里面是原型的方法此方法调用一次即可完成暂停、切换、播放的功能(这串代码是关键)。
                 其中skr为真实dom上所有的span元素节点,i是索引,v是值
    }); }, }

    Au构造函数 :

    function Au(data,clas) {
        this.auido = data;
        this.clas = clas
    }
    Au.prototype = {
        constructor : Au,
        plays :function (el,index,value,) {
            this.el = el;
            if(this.index==index){//一样的
                this.lis(index,el);
                return
            }
            this.auido.src = value.src;
            this.lis(index,el,this.index);//进行播放
            this.index = index;
            this.addlisn_end();//进行监听是否暂停或者结束
        },
        lis : function (i,arr,v) {//播放or暂停
            if(v!=undefined){
                this.ous(v,arr);
            }
          if(this.auido.paused){
              this.auido.play();//播放
              arr[i].classList.add(this.clas);
              return
          }
              this.auido.pause();
        },
        addlisn_end : function () {//监听到播放结束后,在此处可调用自己的接口
            var that = this;
            this.auido.addEventListener('pause', function () {//暂停
                that.ous(that.index,that.el);
            }, false);
        },
        ous : function (i,arr) {
            arr[i].classList.remove(this.clas);
        }
    };

    其实内容到这里就结束了,但是为了能更好的直观的看此功能本博主录了一段视频。

     如发现有漏洞或者可编辑的代码请评论留言。为代码世界贡献多一份力量

  • 相关阅读:
    Redis常见数据类型
    MYSQL常见可优化场景
    算术切片
    找数组里没出现的数
    不同路径和(II)
    不同路径和
    最小路径和
    强盗抢房子
    丑数(2)
    判断子序列
  • 原文地址:https://www.cnblogs.com/blur-king/p/13180846.html
Copyright © 2011-2022 走看看