简体   繁体   English

如何在按键和onclick上激活音频标签

[英]How to make the audio tags activate on keypress and onclick

I currently have a drum machine setup where it activates on keypress. 我目前有一个鼓机设置,可以在按键上激活它。 I want to make it where you can also activate the audio tags on click as well. 我要使其在您还可以点击激活音频标签的地方。

here is the html structure 这是html结构

<body>
    <div class="container">
        <div class="row">
            <div data-key="65" class="key" id="a" >
                <br/>A 
                <br/> Clap-808
            </div>
            <div data-key="83" class="key" id="s">
                <br/>S 
                <br/> Hihat-808
            </div>
            <div data-key="68" class="key" id="d">
                <br/>D 
                <br/> Kick-electro01
            </div>
            <div data-key="70" class="key" id="f">
                <br/>F 
                <br/> Snare-sumo
            </div>
        </div>
        <div class="row">
            <div data-key="74" class="key" id="j">
                <br/>J 
                <br/> Kick-deep
            </div>
            <div data-key="75" class="key" id="k">
                <br/>K 
                <br/> Perc-808
            </div>
            <div data-key="76" class="key" id="l">
                <br/>L 
                <br/> Openhat-808
            </div>
            <div data-key="186" class="key" id="semicolon">
                <br/>; 
                <br/> Snare-lofi01
            </div>
        </div>
        <div class="row">
            <div data-key="90" class="key" id="z">
                <br/>Z 
                <br/> Shaker-Shuffle
            </div>
            <div data-key="88" class="key" id="x">
                <br/>X 
                <br/> Snare-electro 
            </div>
            <div data-key="67" class="key" id="c">
                <br/>C 
                <br/> Tom-808 
            </div>
            <div data-key="86" class="key" id="v">
                <br/>V 
                <br/> Hihat-ring  
            </div>
        </div>
        <div class="row">
            <div data-key="77" class="key" id="m">
                <br/>M
                <br/>Kick-oldschool
            </div>
            <div data-key="188" class="key" id="comma">
                <br/>,
                <br/> Kick-slapback 
            </div>
            <div data-key="190" class="key" id="period">
                <br/>.
                <br/>Kick-newwave 
            </div>
            <div data-key="191" class="key" id="questionMark">
                <br/>?
                <br/>Kick-stomp
            </div>
        </div>
    </div> 

    <audio id="sAudio" data-key="65" src="sounds/clap-808.wav" ></audio>
    <audio src="./sounds/hihat-808.wav" data-key="83"></audio>
    <audio src="./sounds/kick-electro01.wav" data-key="68"></audio>
    <audio src="./sounds/snare-sumo.wav" data-key="70"></audio>

    <audio src="./sounds/kick-deep.wav" data-key="74"></audio>
    <audio src="./sounds/perc-808.wav" data-key="75"></audio>
    <audio src="./sounds/openhat-808.wav" data-key="76"></audio>
    <audio src="./sounds/kick-newwave.wav" data-key="186"></audio>

    <audio src="./sounds/shaker-shuffle.wav" data-key="90"></audio>
    <audio src="./sounds/snare-electro.wav" data-key="88"></audio>
    <audio src="./sounds/tom-808.wav" data-key="67"></audio>
    <audio src="./sounds/hihat-ring.wav" data-key="86"></audio>

    <audio src="./sounds/kick-oldschool.wav" data-key="77"></audio>
    <audio src="./sounds/kick-slapback.wav" data-key="188"></audio>
    <audio src="./sounds/kick-newwave.wav" data-key="190"></audio>
    <audio src="./sounds/kick-stomp.wav" data-key="191"></audio>

</body>
<script src='./javascript.js'></script>
</html>

Here is the javascript code. 这是JavaScript代码。 I want to make the code dry and not right out multiple onclicks for each individual id. 我想使代码干燥,而不是针对每个单独的ID进行多次onclicks处理。 Not quite sure the best way of doing that. 不确定这样做的最佳方法。

window.addEventListener('click',function(event){
    console.log(event);
    const audio = document.querySelector(`audio[data-key="${event}"]`)
    // const audio = document.querySelector(`#s`).innerHTML
    console.log(audio)
    // const key = document.querySelector(`.key[data-key="${event.keyCode}"]`)
    console.log(audio);
    if(!audio) return;
    audio.currentTime =0;
    audio.play();
    // key.classList.add('playing');
});

Try following code snippet might help you 尝试以下代码段可能对您有所帮助

 //music var audio = new Audio('http://www.sousound.com/music/healing/healing_01.mp3') checksound(); function checksound() { var myElement = document.getElementById("soundMenu"); myElement.innerHTML = "Turn Sound " + (audio.paused ? "OFF" : "ON"); if (audio.paused) { audio.play(); } else { audio.pause(); } } function myFunction() { var myElement = document.getElementById("soundMenu"); myElement.innerHTML = "Turn Sound " + (audio.paused ? "OFF" : "ON"); if (audio.paused) { audio.play(); } else { audio.pause(); } } 
 <button id="soundMenu" onclick="checksound()">Play</button> <input type="text" onkeypress="myFunction()" /> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM