HTML拖放声音

Posted

技术标签:

【中文标题】HTML拖放声音【英文标题】:HTML drag n drop sound 【发布时间】:2014-01-11 22:06:19 【问题描述】:

我目前正在尝试用不同的大陆做 html 拖放表。该人将有能力将正确的大陆拖到它应该在的 div 中。我已经完成了所有的 div 标签和拖放功能,但我还想添加的是声音。我有两个声音 right.mp3 和 wrong.mp3。我希望他们可以在人将正确的大陆放在正确的位置以及错误的大陆(正确的大陆作为正确的.mp3,而错误的大陆放置在错误的.mp3)时播放。我尝试了许多不同的方法来制作声音,但不幸的是我无法让它正常工作。如果有人知道该怎么做,如果您向我展示它在代码中的外观,我会非常满意。下面是我到目前为止所做的代码。谢谢。

P.S 抱歉,我的英语不是我的母语,因此给您带来的任何不便,我深表歉意。谢谢。

代码:

    <!DOCTYPE HTML>
    <html>
    <head>
        <style type="text/css">
            #div1
            float:left; width:500px; height:250px;border:1px solid;
                position: absolute;
                background-image:url('Winkel_triple_projection_SW.jpg');
                background-size:500px 255px;
                background-repeat: no-repeat;
                z-index: -10;
            
            #div2
            
             width:80px; height:108px; margin:10px;border:1px solid #aaaaaa;
                background: white;
                z-index: -1;
             position: absolute;
                margin-top: 100px;
                margin-left: 120px;
            

            #americainside
            
                width:100px; height:150px;border:1px solid #aaaaaa;
            
            #div3
            
                width:95px; height:100px; margin:10px;border:1px solid #aaaaaa;
                background: white;
                z-index: -2;
                position: absolute;
                margin-left: 90px;
            
            #northmurica
            

                width:100px; height:130px;border:1px solid #aaaaaa;
            
            #div4
            
                width:95px; height:100px; margin:10px;border:1px solid #aaaaaa;
                background: white;
                z-index: -1;
                position: absolute;
                margin-top: 80px;
                margin-left: 220px;
            
            #Africa
            
                width:100px; height:129px;border:1px solid #aaaaaa;
            
            #div5
            
                width:200px; height:80px; margin:10px;border:1px solid #aaaaaa;
                background: white;
                z-index: -1;
                position: absolute;
                margin-top: 0px;
                margin-left: 232px;
            
            #Europe
            
                width:210px; height:120px;border:1px solid #aaaaaa;
            
            #div6
            
                width:71px; height:58px; margin:10px;border:1px solid #aaaaaa;
                background: white;
                z-index: -1;
                position: absolute;
                margin-top: 140px;
                margin-left: 390px;
            
            #Australia
            
                width:100px; height:100px;border:1px solid #aaaaaa;
            
            #div7
            
                width:300px; height:40px; margin:10px;border:1px solid #aaaaaa;
                background: white;
                z-index: -1;
                position: absolute;
                margin-top: 210px;
                margin-left: 90px;
            
            #Southpole
            
                width:355px; height:70px;border:1px solid #aaaaaa;
            
            #right
               width:360px;
                border:5px solid #aaaaaa;
                float:right;
                margin-right: 30%;
            
    </style>
        <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));
            
        </script>
    </head>
    <body>

    <div id="div1"></div>
    <div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)"> </div>
    <div id="div3" ondrop="drop(event)" ondragover="allowDrop(event)"> </div>
    <div id="div4" ondrop="drop(event)" ondragover="allowDrop(event)"> </div>
    <div id="div5" ondrop="drop(event)" ondragover="allowDrop(event)"> </div>
    <div id="div6" ondrop="drop(event)" ondragover="allowDrop(event)"> </div>
    <div id="div7" ondrop="drop(event)" ondragover="allowDrop(event)"> </div>


    <div id="right">
        <div id="americainside" ondrop="drop(event)" ondragover="allowDrop(event)">
            South America
            <img src="South america.png" draggable="true" ondragstart="drag(event)"

                 id="drag2"  ></div>

        <div id="northmurica" ondrop="drop(event)" ondragover="allowDrop(event)">
            North America
            <img src="North america.png"  draggable="true" ondragstart="drag(event)"

                 id="drag1"  ></div>

        <div id="Africa" ondrop="drop(event)" ondragover="allowDrop(event)">
            Africa
            <img src="Africa.png" draggable="true" ondragstart="drag(event)"

                 id="drag3"  ></div>
    <div id="Europe" ondrop="drop(event)" ondragover="allowDrop(event)">
            Europe
            <img src="Europe.png" draggable="true" ondragstart="drag(event)"

                 id="drag4"  ></div>

        <div id="Australia" ondrop="drop(event)" ondragover="allowDrop(event)">
            Australia
            <img src="Australia.png" draggable="true" ondragstart="drag(event)"

                 id="drag5"  ></div>

        <div id="Southpole" ondrop="drop(event)" ondragover="allowDrop(event)">
            Southpole
            <img src="south pole.png" draggable="true" ondragstart="drag(event)"

                 id="drag6"  ></div>
    </div>

    </body>
    </html>

我确实知道我可以使用其他东西,但我想用 HTML 来做。如果您建议其他可能的选择,我仍然不介意。我显然不要求任何人完成整个工作,但如果你至少能给我展示一个例子,那就太好了。谢谢。

编辑:我也在寻找将 div 标签移动到某处后清除它们的按钮。

编辑 2:我已按照 Alexander T 的建议添加了播放功能,但我确信这里做错了什么。 代码:

        <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));
                ev.playSound;
            
        var path = 'cat.mp3'
            function playSound(path) 
                var sound = new Audio(path);
                sound.play();
            

        </script>

这行不通。我想我没有正确调用该函数。如果有人能告诉我如何正确地做到这一点。谢谢。

编辑:这是它现在的样子,但仍然无法正常工作。不知道我在这里做错了什么。

        <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));
                playSound("catSound");
            
            function playSound(path) 
                var sound = new Audio(path);
                sound.play();
            



        </script>

【问题讨论】:

【参考方案1】:

尝试使用 HTML5 音频 API。

function playSound(path) 
    var sound = new Audio(path); 
    sound.play();

其中 'path' 是一个带有声音路径的字符串,例如'/audio/rightSound.mp3'

在 JS 中有一组方法和属性用于 Audio 对象。在这里找到它http://www.w3schools.com/tags/ref_av_dom.asp 这里有一篇关于在 HTML5 中使用音频的非常好的文章 http://html5doctor.com/html5-audio-the-state-of-play/

【讨论】:

我明白了。但是当项目被放入窗口时我如何让它播放? 当你说路径应该是带有路径的字符串时,你的意思是这样的吗? var path = '/audio/rightSound.mp3' 然后是路径 function drop(ev) ev.preventDefault(); var data=ev.dataTransfer.getData("Text"); ev.target.appendChild(document.getElementById(data)); ev.playSound; 应该类似于:function drop(ev) ev.preventDefault(); var data=ev.dataTransfer.getData("Text"); ev.target.appendChild(document.getElementById(data)); playSound("/audio/rightSound.mp3"); 补充说。似乎没有工作。编辑代码,如果你可以看一下它并告诉它有什么问题,那将非常有帮助。谢谢。 不是playSound("catSound");,而是playSound("catSound.mp3");,如果您将catSound.mp3 文件放在与index.html 相同的目录中。

以上是关于HTML拖放声音的主要内容,如果未能解决你的问题,请参考以下文章

HTML:如何在不缓冲所有声音数据的情况下从 URL 中间文件开始声音播放

使用 Javascript/Jquery 停止 html 声音

Mac电脑没有声音,苹果电脑没有声音怎么办

EDIUS中声音的淡入淡出怎样调节?

如何将一系列声音 HTML5 <audio> 声音剪辑排队以按顺序播放?

使用 Javascript 的声音 HTML? [关闭]