0

I am using HTML and Javascript for a drag and drop activity; dragging pictures onto targets.

In my example, I have two pictures, 'Horse' and 'Cow', and one target. I have two sound files, 'Neigh' and 'Moo'.

If I drag 'Horse' onto the target I want 'Neigh' to play. If I drag 'Cow' onto the target I want 'Moo' to play. The playing should be triggered by a button click.

I have code for the drag and drop but cannot do the sound playing.

EDIT: I know how to play sound files; I don't know how to play a specific file based on the position of an associated picture. Code is below: The function for the play button just plays a given sound file, it isn't controllable in any sense. This is what I need to change.

Thanks for any help :-)

function allowDrop(ev) {
  ev.preventDefault();
}

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

/* this is the DROP function*/

function drop(ev) {
  ev.preventDefault();
  var data = ev.dataTransfer.getData("text");
  ev.target.appendChild(document.getElementById(data));
}

/* plays the snippets when they are clicked clicked*/

function playAudio(url) {
  new Audio(url).play();
}

/*Funcn for play button */

function play_music() {
  document.getElementById("music1").play();
}
#empties {
  width: 410px;
  height: 700px;
  margin-left: 10px;
  margin-top: 0px;
  position: absolute;
  top: 10px;
  left: 0px;
  border: 1px solid blue;
}

.box001 {
  width: 410px;
  height: 41px;
  margin: 0px;
  padding: 0px;
  border: 1px solid blue;
}


/* snippets  */

#music {
  width: 410px;
  height: 700px;
  margin-left: 00px;
  margin-top: 0px;
  position: absolute;
  top: 10px;
  left: 450px;
  border: 1px solid red;
}

.box002 {
  width: 410px;
  height: 41px;
  margin: 0px;
  padding: 0px;
  border: 1px solid red;
}


/* play button */

#my_button {
  margin-left: 00px;
  margin-top: 0px;
  /*padding:10px;*/
  /*border:1px solid black;*/
  position: absolute;
  top: 10px;
  left: 880px;
  border: 1px solid red;
}
<!-- music is dropped into these empty boxes -->

<div id="empties">
  <div class="box001" ondrop="drop(event)" ondragover="allowDrop(event)" id="place001"></div>
</div>

<!-- these are the snippets to be dragged and dropped -->

<div id="music">
  <div class="box002" ondrop="drop(event)" ondragover="allowDrop(event)">
    <img onclick="playAudio('neigh.mp3')" ondragstart="drag(event)" draggable="true" id="target001" src="horse.JPG" alt="" border="0" />
  </div>
  <div class="box002" ondrop="drop(event)" ondragover="allowDrop(event)">
    <img onclick="playAudio('moo.mp3')" ondragstart="drag(event)" draggable="true" id="target002" src="cow.JPG" alt="" border="0" />
  </div>
</div>

<!-- Audio for button-->

<audio id="music1" src="neigh.mp3" preload="auto"></audio>

<!-- Button -->

<div id="my_button">
  <button onclick="play_music()" ;>Play</button>
</div>
Run_Script
  • 2,487
  • 2
  • 15
  • 30
Michael
  • 87
  • 2
  • 9
  • @imvain2 thanks for your comment. Which answer are you referring to in that link? I can see how to play files. I can't see how to 'choose' a file based on where it has been dragged to. – Michael Jul 03 '20 at 17:22
  • the solution is for playing the audio. As for the drag and drop, you will need to checkout [mcve]. – imvain2 Jul 03 '20 at 17:25
  • @imvain2 thanks, I've edited my question to clarify and added code. – Michael Jul 03 '20 at 17:50

0 Answers0