2017-10-17 16 views
0

Ceci est un grand morceau de code, mais si vous me le permettez:Pourquoi ne sont pas les événements de souris de travail

<html> 
    <head> 
    <style> 
     .mobile {position: absolute;} 
    </style> 
    <script> 
     var images = new Array(); 
     image['Key1']='image1.png'; 
     image['Key2']='image2.png'; 
     image['Key3']='image3.png'; 
     image['Key4']='image4.png'; 
     image['Key5']='image5.png'; 

     function createAll() 
     { 
     tag = document.getElementById("canvas"); 
     for(var key in image) 
     { 
      var r = key; 
      while(r.indexOf('_')>-1) 
      { 
      r=r.replace('_',' '); 
      } 

      let t = document.createElement("p"); 
      t.id=r; 
      t.className="mobile" 
      t.xVel = Math.floor(Math.random()*50-25); 
      t.yVel = Math.floor(Math.random()*50-25); 
      t.xPos = Math.floor(Math.random()*1000)-60; 
      t.style.left= t.xPos; 
      t.onclick="clickTag('"+r+"')"; 
      t.yPos=Math.floor(Math.random()*600)-42; 
      ////THIS IS WHERE THE EVENT IS ADDED//// 
      t.addEventListener("onmousedown", function(){clickTag(t);}); 
      ////THIS IS WHERE THE EVENT IS ADDED//// 
      t.style.top=t.yPos; 
      var i = document.createElement("img"); 
      i.src=image[key]; 
      var s = document.createElement("span"); 
      tag.appendChild(t); 
      t.appendChild(i); 
      t.appendChild(s); 
      setTimeout(function() {step(t);},200); 
     } 
     } 

     function restartMe(tag) 
     { 
     var x = Math.floor(Math.random()*1000); 
     var y = Math.floor(Math.random()*600); 
     var xVel = Math.floor(Math.random()*50-25); 
     var yVel = Math.floor(Math.random()*50-25); 

     var r = Math.random(); 
     if(r<.25)//left wall 
     { 
      x=-59; 
      xVel = Math.floor(Math.random()*10); 
     } 
     else if(r<.5)//right wall 
     { 
      x=1059; 
      xVel = -Math.floor(Math.random()*10); 
     } 
     else if(r<.75)//top wall 
     { 
      y=-41; 
      yVel = Math.floor(Math.random()*10); 
     } 
     else//bottom wall 
     { 
      y=641; 
      yVel = -Math.floor(Math.random()*10); 
     } 

     tag.xPos = x; 
     tag.style.left=x; 
     tag.yPos = y; 
     tag.style.top=y; 
     tag.style.xVel=xVel; 
     tag.style.yVel=yVel; 
     let t = tag; 
     setTimeout(function() {step(t);},200); 
     } 

     function step(tag) 
     { 
     var x = tag.xPos; 
     var y = tag.yPos; 
     var dx = tag.xVel; 
     var dy = tag.yVel; 
     x+=dx; 
     y+=dy; 

     let t = tag; 
     if(x<-60 || x>1060 || y<-42 || y>642) 
     { 
      x=-500; 
      y=-500; 
      tag.xPos=x; 
      tag.yPos=y; 
      tag.style.left=x; 
      tag.style.top=y; 
      setTimeout(function() {restartMe(t);},1000); 
      return; 
     } 

     tag.xPos=x; 
     tag.yPos=y; 
     tag.style.left=x; 
     tag.style.top=y; 
     setTimeout(function() {step(t);},200); 
     } 

     function startGame() 
     { 
     var tag = document.getElementById("game"); 
     target = Object.keys(image)[Math.floor(Math.random()*Object.keys(image).length)]; 
     var r = target; 
     while(r.indexOf('_')>-1) 
     { 
      r=r.replace('_',' '); 
     } 
     target=r; 
     tag.innerHTML="Look for the "+target; 
     } 

     function clickTag(id) 
     { 
     ////HERE IS WHERE THE MOUSE EVENT SHOULD EXECUTE//// 
     if(id===target) 
     { 
      startGame(); 
     } 
     var tag = document.getElementById("output"); 
     tag.innerHTML="No, that is the "+id; 
     } 
    </script> 
    </head> 
    <body onload="createAll();startGame()"> 
    <h2>What do you see?</h2> 
    <p id="game"></p> 
    <p id="output"></p> 
    <p id="canvas" class="black" width="1000" height="600"></p> 
    </body> 
</html> 

D'accord, voici en bas de la course. Je commence avec plusieurs noms de fichiers d'images dans un tableau avec une clé qui identifie l'image. Lorsque la page se charge, je passe par le processus de création d'un ensemble de balises p mobiles contenant l'image et un événement de clic. Il y a un délai d'expiration pour chacune de ces étiquettes, puis elles se déplacent sur l'écran. Lorsque l'un d'eux atteint une limite, il attend une seconde puis recommence depuis l'une des marges. Cette partie fonctionne bien, mais pas l'événement souris.

Je continue de rechercher un événement souris lorsque je clique sur l'une de ces choses, mais rien ne se passe. J'ai essayé de mettre l'événement sur le p et le img. J'ai essayé des variantes de onmousedown, onmouseup, onclick, etc. et rien ne semble fonctionner. Il me manque probablement quelque chose d'évident, alors j'apprécierais un deuxième jeu d'yeux.

+0

Parce que addEventListener n'utilise pas "on" dans les noms d'événement – epascarello

Répondre

2

Première addEventListener n'utilise pas « sur » dans la chaîne

t.addEventListener("mousedown", ... 

Maintenant, vous ajoutez tous les autres événements correctement et que vous appelez fermetures avec vos délais d'attente, mais vous construisez l'événement click mal.

t.onclick="clickTag('"+r+"')"; 

Affectant une chaîne à l'écouteur d'événements, il ne lie pas un appel de fonctionnalité.

t.onclick= function() { clickTag(r); }; 
+0

Ah. Oui. C'est ce qu'il a fait. Merci – BSD

0

Il n'y a qu'une seule instance de createAll dans votre exemple, mais sa montre comme une déclaration de fonction, de sorte que vous n'êtes jamais exécuter réellement createAll(), il est donc ne pas permettre à vos auditeurs d'événements.

Essayez de remplacer createOne() par createAll().

<body onload="createOne();startGame()"> 
+1

Merci. C'était une faute de frappe. Je l'ai réparé maintenant. – BSD