Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Problema con event.which

    Provate a premere sui tasti freccia e potete giocare a un giochino molto divertente:
    codice:
    <!DOCTYPE html>
    <html>
      <head>
        <style type="text/css">
          body {
            background-color:black;
          }
     
          h1 {
            color: yellow;
          }
     
          img#spaceShip {
            position: absolute;
            left:0;
            top:80%; 
            background-color:blue;
          }
     
          img#invader {
            position: absolute;
            left:25%;
            top:10%; 
          }
     
          div#laser {
            position: absolute;
            display: none; 
            left:0;
            top:0;
            width:10px;
            height:70px;
            background-color: red; 
          }
        </style>
        <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
        <script type="text/javascript">
          $(function(){
            $( document ).keydown( function( event ){
              var keyCode = event.keyCode || event.which;
              var keyMap = { left: 37, up: 38, right: 39, down: 40 };
     
              switch ( keyCode ) {
                case keyMap.left:
                  $( "#spaceShip" ).animate({
                    left: '-=50'
                  }, 200 );
                break;
     
                case keyMap.up:
                  var ufoLeft = $( "#spaceShip" ).offset().left;
                  var ufoTop = $( "#spaceShip" ).offset().top;
                  $( "#laser" ).offset( {left:ufoLeft+87, top:(ufoTop-30)} );
                  $( "#laser" ).css( "display", "block" )
                             .animate( {top:10}, 200, function(){
                                var invaderLeft = $( "#invader" ).offset().left;
                                var laserLeft = $( "#laser" ).offset().left;
     
                                if( laserLeft >= invaderLeft && 
                                    laserLeft <= invaderLeft + 288){ 
                                  $( "#invader" ).hide();
                                  $( "body" ).html( "<h1>Direct Hit!</h1>" );
                                } 
     
                                $( "#laser" ).offset( {left:0, top:0} );
                                $( "#laser" ).css( "display","none" );
                             });
                break;
     
                case keyMap.right:
                  $( "#spaceShip" ).animate({
                    left: '+=50'
                  }, 200 );
                break;
              }
            });
          });
        </script>
      </head>
      <body>
        <img id="spaceShip" src="spaceShip.png">
        <img id="invader" src="invader.png"> 
        <div id="laser"></div>
      </body>
    </html>
    L'unica cosa che non capisco è questa riga di codice:
    codice:
    var keyCode = event.keyCode || event.which;
    che l'autore non commenta minimamente. event.keyCode credo che serva per catturare il numero del tasto che sta scatenando l'evento ma event.which non ho la minima idea. Oltre più se scrivo:
    codice:
    var keyCode = event.keyCode;
    lo snippet funziona ugualmente. In pratica keyCode e which forniscono lo stesso valore e non mi è chiaro perché l'autore li usa entrambi.
    Ultima modifica di giannino1995; 06-06-2015 a 21:18
    Più pratica in futuro...

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Immagino che certi browser usano keyCode, altri which e forse altri tutti e due.
    Per var keyCode =event.keyCode ||event.which;
    Se keyCode torna null e which un valore non nullo allora il risultato è il valore non nullo. E vice versa.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Immagino che certi browser usano keyCode, altri which e forse altri tutti e due.
    Per var keyCode =event.keyCode ||event.which;
    Se keyCode torna null e which un valore non nullo allora il risultato è il valore non nullo. E vice versa.
    thanks

    Più pratica in futuro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.