Hola César: gracias por dedicar tu tiempo a leer mi problema.
He estado mirando los ejemplos y no vale que el niño tenga que apretar un botón para que se oiga la locución, sino que se reproduzca automáticamente desde que suelte la última vocal; o sea, cuando haga drop.
Te envío el código de la aplicación.
Gracias y saludos de Juan Luis.
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
<title>Frase Mamá</title>
<style type="text/css">
#box1, #box2, #box3, #box4, #box5, #box6, #box7{
float:left; width:50px; height:50px; padding:5px; margin:5px;
}
#box1 { background-color: #FFFFFF; }
#box2 { background-color: #FFFFFF; }
#box3 { background-color: #FFFFFF; }
#box4 { background-color: #FFFFFF; }
#box5 { background-color: #FFFFFF; }
#box6 { background-color: #FFFFFF; }
#box7 { background-color: #FFFF00; }
#drag, #drag2, #drag3, #drag4 {
width:0px; height:0px; padding:0px; margin:0px;
-moz-user-select:none;
border:0px solid white;
cursor:pointer ;
}
#drag { background-color: #FFFF00;}
#drag2 { background-color: #FFFF00;}
.Estilo1 {
font-family: Arial;
color: #0000FF;
}
.Estilo2 {
font-family: Arial;
color: #FF0000;
}
.Estilo3 {font-family: Arial}
.Estilo5 {color: #0000FF}
.Estilo4 {color: #FF0000}
.Estilo7 {color: #FFFFFF}
</style>
<script type="text/javascript">
function dragStart(ev) {
ev.dataTransfer.effectAllowed='copy';
ev.dataTransfer.setData("Text", ev.target.getAttribute('id'));
ev.dataTransfer.setDragImage(ev.target,0,0);
return true;
}
function dragEnter(ev) {
var iddrag = ev.dataTransfer.getData("Text");
return true;
}
function dragOver(ev) {
var iddrag = ev.dataTransfer.getData("Text");
var id = ev.target.getAttribute('id');
if( (id =='box4' || id =='box4') && (iddrag == 'drag' || iddrag=='drag4'))
return false;
else if( id =='box6' && iddrag == 'drag6')
return false;
else if( id =='box6')
return false;
else
return true;
}
function dragEnd(ev) {
ev.dataTransfer.clearData("Text");
return true
}
function dragDrop(ev) {
var iddrag = ev.dataTransfer.getData("Text");
ev.target.appendChild(document.getElementById(iddrag));
ev.stopPropagation();
return false;
}
function isNull(valor){
if (valor.toString()=='undefined'){ return true;}
else if (valor.toString()=='NULL'){ return true;}
}
function verQueTieneDebug(id){
var str="";
var caja=document.getElementById(id);
for( var i = 0; i < caja.childNodes.length; i++ ) {
if (caja.childNodes[i].nodeType === 1) {
var tipo=caja.childNodes[i];
var id1=caja.childNodes[i].getAttribute('id');
var valor=document.getElementById(id1).innerHTML;
str+="tipo="+tipo+" id="+id1+ " valor="+valor;
}
}
if(str=="") str="nada (los textos no cuentan porque no estan encapsulados en etiquetas html y no cuentan como tal. Si se les encapsula en <span></span> si que contarian (porque serian elementos hijos). Un ejemplo de esto es el cuadro negro.";
alert(str);
}
function verQueTiene(id){
var str="";
var caja=document.getElementById(id);
for( var i = 0; i < caja.childNodes.length; i++ ) {
if (caja.childNodes[i].nodeType === 1) {
var tipo=caja.childNodes[i];
var id1=caja.childNodes[i].getAttribute('id');
var valor=document.getElementById(id1).innerHTML;
str+=""+valor+"\n";
}
}
if(str=="") str="No contiene nada";
else str="Contiene:\n"+str;
alert(str);
}
</script>
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) { //reloads the window if Nav4 resized
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
function MM_openBrWindow(theURL,winName,features) { //v2.0
window.open(theURL,winName,features);
}
//-->
</script>
</head>
<body>
<fieldset>
<table width="36%" border="0" align="right">
<tr valign="top" class="Estilo3">
<td width="45%"><h1 align="center"><img src="Mamá.jpg" width="205" height="131"></h1></td>
</tr>
</table>
<div id="box1" ondragenter="return dragEnter(event)" ondrop="return dragDrop(event)" ondragover="return dragOver(event)">
<div id="drag" draggable="true" ondragstart="return dragStart(event)" ondragend="return dragEnd(event)">
<h1 class="Estilo1">a</h1>
</div>
</div>
<div id="box2" ondragenter="return dragEnter(event)" ondrop="return dragDrop(event)" ondragover="return dragOver(event)">
<div id="drag" draggable="true" ondragstart="return dragStart(event)" ondragend="return dragEnd(event)">
<h1 class="Estilo1">á</h1>
</div>
</div>
</fieldset>
<div id="box3" ondragenter="return dragEnter(event)" ondrop="return dragDrop(event)" ondragover="return dragOver(event)">
<h1 class="Estilo2">m</h1>
</div>
<div id="box4" ondragenter="return dragEnter(event)" ondrop="return dragDrop(event)" ondragover="return dragOver(event)"></div>
<div id="box5" ondragenter="return dragEnter(event)" ondrop="return dragDrop(event)" ondragover="return dragOver(event)">
<h1 class="Estilo2">m</h1>
</div>
<div id="box6" ondragenter="return dragEnter(event)" ondrop="return dragDrop(event)" ondragover="return dragOver(event)"></div>
<h1 class="Estilo2"> </h1>
<p class="Estilo2"> </p>
<a href="Sitio de Dailos/Aplauso/Aplauso/Aplauso.html"></a>
<table width="41%" border="0">
<tr class="Estilo4">
<td width="16%"><div align="center" class="Estilo3">
<h1 align="left"> m </h1>
</div></td>
<td width="13%"><div align="center" class="Estilo3">
<h1 align="center"><span class="Estilo5">a</span></h1>
</div></td>
<td width="22%"><div align="center" class="Estilo3">
<h1 class="Estilo4">m</h1>
</div></td>
<td width="8%"><div align="center" class="Estilo3">
<h1 align="right"><span class="Estilo5">á</span></h1>
</div></td>
<td width="12%"><div align="center" class="Estilo3">
<h1 class="Estilo5"> </h1>
</div></td>
<td width="29%"><div align="center" class="Estilo3">
<h1> </h1>
</div></td>
</tr>
</table>
</body>
</html>