最近

作者: assassian_zj | 来源:发表于2017-04-11 18:28 被阅读0次
Paste_Image.png

最近做移动端小项目需要用到audio标签,完成如图中这样的场景。就是每个item代表一位参赛作者的录音作品,通过点击图中的绿色横条来播放录音。一个item的代码结构如下:

<div class="problemContent1 wrap">
    <div class="mr">
       ![](/Public/..//uploads/activity_for_xqb/image/7sKQcVChE6_6KUyeBe7Z2nsL3WjgitIVr27RnoeF9WG_8ZTGIKtmqg-h_y6hsGzl.jpg)
       ![](/Public/images/signUp/num1.png)
    </div>
    <div class="wrap-content info">
        <span class="num">5</span>
        <span>成人D</span>
        <span id="voteAdd5" class="fr">14票</span>
        <!--播放录音-->
        <p class="record color1" onclick="listItemClick( '/Public/..//uploads/activity_for_xqb/ZONbV7fTuvpEawdpR1lFrO43P7TQrkoJUbcPozJuXrYM0sNul4YQHaFNtnzhGOBV.mp3',this)">
            ![](/Public/images/signUp/oval.png)
        </p>
    </div>
    <div class="choose">
       ![](/Public/images/choose.png)
    </div>
</div>

我是通过在p标签上绑定listItemClick方法来触发录音播放,最开始自己想到的办法是先获取页面上所有的audio标签,然后用for循环遍历它们,再判断是否处于暂停状态,如果不是暂停状态就让之前的audio标签执行pause()方法来暂停播放,代码为:

function listItemClick(audio,tag) {
            $(".oval").removeClass("slow");
            $(tag).find(".oval").addClass("slow");
            var autoArr = document.getElementsByTagName("audio"),
             len = autoArr.length;
                for(var i=0;i<len;i++){
                    if(!autoArr[i].paused){
                        autoArr[i].pause();
                    }
                }
            var autoAudio = document.createElement("audio");
            autoAudio.src = audio;
            autoAudio.play();
            document.body.append(autoAudio);
            audioDom.addEventListener('ended', function (){
                $(".oval").removeClass("slow");
            }, false);
        }

这样做的缺点就是每点击一次就会额外生成一个audio标签,这在移动端太不友好了,后来飞哥写了一种简单的方法:

   var audioDom;
   function listItemClick(audio,tag) {
            $(".oval").removeClass("slow");
            $(tag).find(".oval").addClass("slow");
            if (!audioDom) {
                audioDom = document.createElement("audio");
                document.body.appendChild(audioDom);
            }
            audioDom.src = audio;
            audioDom.play();
            audioDom.addEventListener('ended', function () {
                $(".oval").removeClass("slow");
            }, false);
        }

先定义了一个全局变量audioDom,然后点击的时候通过判断audioDom是否存在来确定需不需要创建新的audio标签,这样保证到头来只创建了一个audio标签,只通过更改audio.src属性就能达到效果,蛮6的。

相关文章

  • 最近,最近

    总是有人问我为什么直至今日还是单身, 其实我一直都很期待一份感情, 但我期待的是真挚的,成熟的,负责的, 而不是鲁...

  • 最近 最近

    忽然就想做点儿无用的事情。 我不是爱写东西的人。路过看过,走心足矣,记那么多事情,累。我大概不会细腻到觉得经历过的...

  • 最近最近

    最近老想着下笔写这,写那,可到手边却总举足不定,提起写心情的笔又想着该写写相关事件,可提起事件的笔,又想着...

  • 最近的最近

    实习,终于告一段落了,一个月,说快不快,说慢也不慢,还是悄悄地过了......回了家,才知道,原来已经习惯了实习那...

  • 最近的最近

    总是想写点什么,却总是不知道从哪下手。 又或者想了很多很多,却因为各种事情而作罢。 作为一个全职妈妈,并且是一个人...

  • 最近的最近

    最近的最近,各种事情接踵而至。每天迷迷糊糊的。以至于干出手扶电风扇的挫事。。 每天的忙碌时刻,才能放空自己。。。 ...

  • 最近的最近

    感觉自己好久不曾提笔了。最近的事情太多太杂,感觉压得自己喘不过气来。昨天下班回来,洗漱完九点倒头就睡。寝室...

  • 最近的最近

    2019年的年第一次没有在家过,也许是被自己的勇气所成就的。十年前的感觉仿佛在像我召唤。第一个没有春节联欢...

  • 最近的最近~

    最近真的好累啊,每天不停的学习,脑子感觉严重不够用了,每天从早坐到晚上,有时起身的时候发现自己的腿已经有些僵硬,眼...

  • 最近生病,最近亢奋

    深圳突然变得很冷。这是上周的事情。深圳入冬以来,我一直都有小心保暖,可是防不胜防。就在昨天,我昏睡了一下午,因为发...

网友评论

      本文标题:最近

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