2016-02-05 58 views
3

我正在将一个Konami复活节彩蛋放入我的网站以供踢腿;你输入Konami密码,它会播放街头霸王的夸张声音,背景中的歌舞伎面具上的眼睛会亮起一秒钟。我该如何获得这个Javascript函数来正确迭代?

它有效...有点。我遇到了问题。输入Konami代码后,每次用户按下一个键时,上述效果都会迭代。这并不意味着要这样做。每次用户输入完整的代码时,我只想立即关闭效果。

还有另一个更小的呃逆,会很好解决。通过简单地将初始背景切换为具有期望效果的一个,实际上使面具的眼睛发亮。但是,第一次完成时,页面会在第二个背景加载时闪烁,但后续迭代中不会有闪光。我的想法是将第二个背景加载为HTML图像,并将其可见性设置为隐藏,但这并不起作用。

<script> 
     function PlaySound(path) 
     { 
      var audioElement = document.createElement('audio'); 
      audioElement.setAttribute('src', path); 
      audioElement.play(); 
     } 
     function resetBackground() 
     { 
      document.body.style.backgroundImage = "url('onics.png')"; 
     } 
     function flashBackground() 
     { 
      document.body.style.backgroundImage = "url('onics_red.png')"; 
      setTimeout(resetBackground, 830); 
     } 
     if(window.addEventListener) 
     { 
      var kkeys=[],konami="38,38,40,40,37,39,37,39,66,65"; 
      window.addEventListener("keydown",function(e) 
      { 
      kkeys.push(e.keyCode); 
      if(kkeys.toString().indexOf(konami)>=0) 
       { 
        PlaySound('hadouken.wav'); 
        flashBackground(); 
       } 
      },true); 
     } 
    </script> 

回答

3

您需要的kkeys阵列复位:

if(window.addEventListener) 
    { 
     var kkeys=[],konami="38,38,40,40,37,39,37,39,66,65"; 
     window.addEventListener("keydown",function(e) 
     { 
     kkeys.push(e.keyCode); 
     if(kkeys.toString().indexOf(konami)>=0) 
      { 
       kkeys = []; 
       PlaySound('hadouken.wav'); 
       flashBackground(); 
      } 
     },true); 
    } 
+0

这样做。谢谢,jcubic。 –

1

您可以添加一个标志

<script> 
    var konamiPlayed = false; 
    function PlaySound(path) 
    { 
     var audioElement = document.createElement('audio'); 
     audioElement.setAttribute('src', path); 
     audioElement.play(); 
    } 
    function resetBackground() 
    { 
     document.body.style.backgroundImage = "url('onics.png')"; 
     konamiPlayed = false; 
    } 
    function flashBackground() 
    { 
     document.body.style.backgroundImage = "url('onics_red.png')"; 
     setTimeout(resetBackground, 830); 
    } 
    if(window.addEventListener) 
    { 
     var kkeys=[],konami="38,38,40,40,37,39,37,39,66,65"; 
     window.addEventListener("keydown",function(e) 
     { 
      if (!konamiPlayed) { 
       kkeys.push(e.keyCode); 
       if(kkeys.toString().indexOf(konami)>=0) 
       { 
        konamiPlayed = true; 
        PlaySound('hadouken.wav'); 
        flashBackground(); 
       } 
      } 
     },true); 
    } 
</script> 

编辑:

而对于小问题,我想这是因为浏览器加载图像只有当你问它。所以,第一次需要一些时间。

+0

我很感激,Gwendal。不过,这引入了一个不同的问题。当我使用这个脚本时,它只会播放一次,句号。每次输入代码时,我都希望它播放一次。所以,当我的原始代码在输入代码时进行播放时,以及之后的每次击键(不好)时,无论代码输入多少次,此代码只会播放一次。 –

+0

@AdamFeoras我的不好,我没有正确理解你的问题。 jcubic给了一个更好的答案 – Gwendal

+0

我仍然很感激你抽出周五早上的时间来帮助我。 –

相关问题