2010-03-02 7 views
8

mi hanno creato un easteregg rudimentale nel mio codice per attivare quando le seguenti combinazioni di tasti sono realizzati (non contemporaneamente) Enter + c + o + l + o + r + s con il seguente codice:jQuery rileva i tasti e impostare le variabili di conseguenza

isEnter = 0; isC = 0; isO = 0; isL = 0; isR = 0; isS = 0; 
$(window).keydown(function(e){ 
    if(e.which==13) isEnter = 1; if(e.which==67) isC = 1; if(e.which==79) isO = 1; 
    if(e.which==76) isL = 1; if(e.which==82) isR = 1; if(e.which==83) isS = 1; 
    ColorMap(); 
}); 

function ColorMap(){ 
    if(isEnter==1 && isC==1 && isO==1 && isL==1 && isR==1 && isS==1){ 
    //DO FUNCTION// 
    isEnter = 0; isC = 0; isO = 0; isL = 0; isR = 0; isS = 0; //SET VARS BACK TO 0 
    }; 
}; 

Ho bisogno di aggiungere funzionalità di ripristino alla funzione keydown per resettare tutte le variabili se qualcosa di diverso da quei tasti sono premuti ... in questo modo devono premere Enter + c + o + l + o + r + s o l'istruzione viene resettata e devono ricominciare ... (questo renderà la 'EasterEgg' più difficile da arrivare a [o almeno meno probabilità di arrivare per combinazione di tasti casuali o casuali]).

+0

così tante variabili! grazie a dio la tua parola ha solo 6 caratteri –

+0

@sadmicrowave - Ho aggiunto una soluzione qui sotto dove non devi preoccuparti dei codici dei caratteri, puoi usare qualsiasi stringa abbastanza facilmente. –

risposta

13

Si desidera controllare anche questi in ordine. In questo momento, è possibile premere i tasti in qualsiasi ordine e attivare comunque l'Easter Egg. Enter + lorocs per esempio.

sarei memorizzare i valori che stai cercando, al fine, come questo:

//  Enter, c, o, l, o, r, s 
var keys = [13,67,79,76,79,82,83]; 

Poi, si può solo tenere traccia di dove l'utente si trova nella sequenza:

var nextKey = 0; 
$(window).keydown(function(e){ 
    var key = e.which; 
    if (key === keys[nextKey]) 
     nextKey++; 

    ColorMap(); 
}); 

Ciò incrementerà nextKey ogni volta che si abbina alla chiave successiva che si sta cercando nella sequenza. La variabile nextKey inizia dall'indice 0, il che significa che iniziamo a cercare Enter. Ora, dobbiamo verificare la condizione di fine nella funzione ColorMap.

function ColorMap() { 
    var maxKeyIndex = keys.length - 1; 
    if(nextKey >= maxKeyIndex) { 
    //DO FUNCTION// 

    nextKey = 0; 
    } 
} 

Questa soluzione dovrebbe consentire di modificare la sequenza speciale nella variabile keys senza richiedere un cambiamento in altre parti del codice.

EDIT: Se si desidera che la risposta di essere contigui, come probabilmente lo fai, allora è possibile ripristinare la variabile nextKey quando la partita non riesce.

if (key === keys[nextKey]) 
    nextKey++; 
else 
    nextKey = 0; 

Per il credito extra, si potrebbe passare questa opzione per utilizzare una stringa per tenere l'uovo di Pasqua, poi String.fromCharCode per convertirlo al codice personaggio che e.which rendimenti.

+0

È possibile forzare le chiavi dell'uovo di Pasqua affinché siano contigue impostando il contatore nextKey su zero se il carattere non corrisponde. – Pointy

+0

Certamente. All'inizio intendevo farlo, ma ho dimenticato. – EndangeredMassa

+0

@ EndangeredMassa - questo è esattamente quello che sto cercando. @Pointy - Devo aggiungere anche questa funzionalità ... sembra che aggiunga: if (chiave! = Keys [nextKey]) nextKey = 0; dovrebbe fare il trucco ma per qualche motivo non funziona. – sadmicrowave

3

Ho risposto a una domanda simile all'uovo di Pasqua di recente, quindi ti indicherò solo quello.

Ci vuole un approccio diverso da quello che stai facendo, e non ha bisogno di essere resettato.

Javascript/jQuery Keypress logging

EDIT: Ecco una versione aggiornata che mantiene la storia chiave da troppo tempo.

$(document).ready(function() { 

    var easterEgg = 'egg'; 
    var eggLength = easterEgg.length; 
    var keyHistory = ''; 
    var match; 
     $(document).keypress(function(e) { 
      keyHistory += String.fromCharCode(e.which) 
      match = keyHistory.match(easterEgg); 
      if(match) { 
       alert(match); 
       keyHistory = match = ''; 
      } else if (keyHistory.length > 30) { 
       keyHistory = keyHistory.substr((keyHistory.length - eggLength - 1)); 
      } 
     }); 
}); 
+0

'+ 1' gr8, mi piace la tua risposta sul post. L'unica cosa è, diciamo che l'utente preme migliaia di tasti senza premere la combinazione per easter egg, quindi 'keyHistory' sarà enorme. Non è vero? –

+0

Buon punto. In effetti, stavo proprio pensando questo, quindi ho aggiornato il codice. Pubblicherà in un secondo. (Sia qua e là.) – user113716

+0

:), ora va bene. L'unico punto che rimane è, in: 'keyHistory = keyHistory.substr ((keyHistory.length - eggLength - 1));' credo, u può sostituire 'keyHistory.length' con il 30, come avete già hardcoded tht. –

0

Bene, ora lascerete che i vostri utenti premano i tasti magici in qualsiasi ordine, il che non sarebbe molto divertente. Metterei la sequenza magica in un array e, con la combinazione dei tasti, avanza nell'array. Se arrivi alla fine, è ora di Egg.

modificare esattamente come scritto @EndangeredMassa.

0

Ecco un altro approccio:

<script type="text/javascript"> 
$(function() { 
    $(window).keypress(function(e) { 
    var input = $("#input"); 
    input.val(function(i, v) { return v + String.fromCharCode(e.which) }); 

    if(input.val().indexOf('colors') > -1) { 
     alert('Easter Egg'); 
     input.val(''); 
    } 
    else if('colors'.indexOf(input.val())) { 
     //Clear value, they've hit another key 
     input.val(''); 
    }   
    }); 
}); 
</script> 
<input id="input" type="text" /> 

Tiene traccia della quota corrente dei colori che hai digitato in una casella di testo facile per il debug, è sufficiente aggiungere un style="display: none;" quando hai finito di test.