2010-03-02 22 views
8

que han creado un Easteregg rudimentaria dentro de mi código para activar cuando se realizan las siguientes combinaciones de teclas (no simultáneamente) Enter + c + o + l + o + r + s con el siguiente código:jQuery detecta pulsaciones y establecer las variables de acuerdo con

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 
    }; 
}; 

tengo que añadir la funcionalidad de restablecimiento a la función de tecla para restablecer todas las variables si se presionan otras teclas que no sean esas teclas ... de esa manera tienen que presionar Enter + c + o + l + o + r + s o la declaración se reinicia y tienen que comenzar de nuevo ... (esto hará que el 'EasterEgg' sea más difícil de llegar a [o al menos menos probabilidades de llegar a por golpe de suerte o teclas al azar]).

+0

tantas variables! gracias a Dios tu palabra es tener solo 6 caracteres –

+0

@sadmicrowave - Agregué una solución a continuación donde no necesitas preocuparte por los códigos de los caracteres, puedes usar cualquier cadena con bastante facilidad. –

Respuesta

13

Desea verificar esto en orden, también. En este momento, puedes presionar las teclas en cualquier orden y aún así activar el huevo de Pascua. Enter + lorocs por ejemplo.

Me almacenar los valores que busca el fin, así:

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

Entonces, sólo puede realizar un seguimiento de dónde está el usuario en la secuencia:

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

    ColorMap(); 
}); 

Esto aumentará nextKey cada vez que coincida con la siguiente tecla que está buscando en la secuencia. La variable nextKey comienza en el índice 0, lo que significa que comenzamos a buscar Enter. Ahora, necesitamos verificar la condición final en la función ColorMap.

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

    nextKey = 0; 
    } 
} 

Esta solución debe permitirle cambiar la secuencia especial en la variable keys sin que sea necesario un cambio en la otra parte del código.

EDIT: Si desea que la respuesta sea contigua, ya que es probable que sí, entonces se puede restablecer la variable nextKey cuando la comparación falla.

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

Para el crédito adicional, usted podría cambiar esta opción para utilizar una cadena para sostener el huevo de Pascua, a continuación, String.fromCharCode para convertirlo en el código de caracteres que e.which devoluciones.

+0

Puede forzar que las claves del Huevo de Pascua tengan que estar contiguas ajustando el contador de la próxima clave en cero si el carácter no coincide. – Pointy

+0

Ciertamente. Tenía la intención de hacer eso al principio, pero lo olvidé. – EndangeredMassa

+0

@EndangeredMassa - esto es exactamente lo que estoy buscando. @Pointy - Necesito agregar esa funcionalidad también ... parece agregar if (key! = Keys [nextKey]) nextKey = 0; debería hacer el truco, pero por alguna razón no funciona. – sadmicrowave

3

Respondí una pregunta similar al huevo de Pascua recientemente, así que solo te señalaré esa.

Toma un enfoque diferente de lo que está haciendo, y no necesita reiniciarse.

Javascript/jQuery Keypress logging

EDIT: Aquí es una versión actualizada que mantiene la historia clave de conseguir demasiado larga.

$(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, me gusta su respuesta en esta publicación. Lo único es, digamos que el usuario presiona miles de teclas sin presionar la combinación de huevo de Pascua, entonces 'keyHistory' será enorme. ¿No es así? –

+0

Buen punto. De hecho, solo estaba pensando eso, así que actualicé el código. Lo publicaremos en un segundo. (Tanto aquí como allí). – user113716

+0

:), ahora está bien. El único punto restante es, en: 'keyHistory = keyHistory.substr ((keyHistory.length - eggLength - 1));' supongo que puedes reemplazar 'keyHistory.length' por 30, como ya has codificado tht. –

0

Bueno actualmente vas a permitir que sus usuarios presionan las teclas mágicas en cualquier orden, lo cual no sería muy divertido. Colocaría la secuencia mágica en una matriz y, a medida que las pulsaciones de teclas coincidan, avanzarás en la matriz. Si llegas al final, entonces es la hora del huevo.

editar exactamente como @EndangeredMassa escribió.

0

Aquí hay otro enfoque:

<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" /> 

Se realiza un seguimiento de la porción corriente de los colores que ha escrito en un cuadro de texto fácil para la depuración, sólo tiene que añadir un style="display: none;" cuando haya terminado la prueba.

Cuestiones relacionadas