javascript - 按特定顺序拖动音频文件 html5

标签 javascript jquery html

我的音乐文件有四个损坏的部分。 我想拖放音乐文件,以便文件按给定顺序播放。这个想法是用户必须按正确的顺序拖动音频文件。 我可以拖放音乐文件,但不明白如何将源设置为拖动音频的 src。

这是代码:

<script>

$(document).ready(function(){

    $("#gif").hide();

    $("#play").click(function(){
        $("#span1").hide();
        $("#span2").hide();
        $("#span3").hide();
        $("#span4").hide();
        $("#gif").show();
       var one = document.getElementById("one");
       var two = document.getElementById("two");
       var three = document.getElementById("three");
       var four = document.getElementById("four");

       one.addEventListener("ended", function () {
           two.play();
          });
       two.addEventListener("ended", function () {
           three.play();
          });
       three.addEventListener("ended", function () {
           four.play();
          });
       one.play();
    });
});
</script>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<script>
    function allowDrop(ev) {
        ev.preventDefault();
    }

    function drag(ev) {
        ev.dataTransfer.setData("text", ev.target.id);
    }

    function drop(ev) {
        ev.preventDefault();
        var data = ev.dataTransfer.getData("text");
        ev.target.appendChild(document.getElementById(data));
        console.log(ev);
    }
</script>
</head>
<body>



    <audio controls id="span1" class="bg-info" ondrop="drop(event)" ondragover="allowDrop(event)"> </audio>
    <audio controls id="span2" class="bg-info" ondrop="drop(event)" ondragover="allowDrop(event)"> </audio>
    <audio controls id="span3" class="bg-info" ondrop="drop(event)" ondragover="allowDrop(event)"> </audio>
    <audio controls id="span4" class="bg-info" ondrop="drop(event)" ondragover="allowDrop(event)"> </audio>

    <button id="play">Play</button>
    <br>

        <audio draggable="true" ondragstart="drag(event)" id="one" controls>
         <source src="PoetsOne.mp3"type="audio/ogg">
            </audio>
    <br>

        <audio draggable="true" ondragstart="drag(event)" id="two" controls> <source src="PoetsTwo.mp3"
            type="audio/ogg"> </audio>
    <br>

        <audio draggable="true" ondragstart="drag(event)" id="three" controls> <source src="PoetsThree.mp3"
            type="audio/ogg"> </audio>
    <br>

        <audio draggable="true" ondragstart="drag(event)" id="four" controls> <source src="PoetsFour.mp3"
            type="audio/ogg"></audio>
    <br>

    <input type="button" value="Play Again"
        onClick="window.location.reload()">
    <img id="gif" alt="playing" src="sam.gif" />

</body>

目前看起来是这样的。我可以将下面的音频标签拖放到顶部

enter image description here

最佳答案

在你的 drop 函数中,正如 @Mouser 所说,获取源元素的路径。实际上,您的数据变量仅包含音频元素的 id,因此您必须转到源元素,因为存在您需要的 src 属性。所以你的函数将是:

function drop(ev) {             
    ev.preventDefault();            
    var data = ev.dataTransfer.getData("text");             
    ev.target.src = document.getElementById(data).getElementsByTagName("source")[0].src;
}

这样做的坏处是,如果您有多个源元素(为了跨浏览器兼容性),您将传递错误的源 url,因为元素位置是硬编码的。我建议你看看this answer

关于javascript - 按特定顺序拖动音频文件 html5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45695568/

相关文章:

javascript - div 中的 CSS 绝对定位元素

javascript - 在 Objective-C 中更改 Javascript 变量

javascript - 使用 javascript 了解视频的时长

javascript - 当内容溢出超过div的固定高度时如何创建新的div?

jquery - 使用 NicEditor 调整窗口大小

html - 如何将列表项与 Font Awesome 图标下一行文本对齐?

javascript - Node : 'require' a module in Nodejs doesn't work with certain filename

javascript - 单击时将文本颜色更改为随机颜色(按钮)

php - 当数据传输到php文件时调用函数

javascript - excel 文件不是使用 javascript 创建的