利用js数组实现队列并简单完成个按键解密程序

116 阅读4分钟

利用js数组实现队列

Hi 这里是zijing 在这篇文章中主要是讲解了如何利用js中的数组来实现队列,并且利用队列来实现一个简单的按键解密的程序,可以在网站上用来隐藏一些特别的东西让你想看到的人看到,如果你对实现不感兴趣只是图个新鲜或已回可直接点击这里下载本文实现的html

什么是队列

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端进行删除操作,而在表的后端进行插入操作,也就是常说的先进先出后进后出。和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

利用js实现队列

本文主要是使用了js中的数组来实现的队列
主要实现了以下几个方法

  • enqueue 入队
  • dequeue 出队
  • toString 输出队列
    function Queue() {
      // 队列长度
      this.length = 0
      //  队列元素
      this.items = []
      
      //入队
      this.enqueue = (item) => {
        this.length++
        console.log(this)
        this.items.push(item)
        console.log(item)
      }

      //出队
       this.dequeue = () => {
        if(this.length == 0)
        alert('队列为空')
        else
        {
          this.items.shift()
          this.length-- 
        }
      }

       //字符串输出
       this.toString = () => {
        let words = ''
        for(item of this.items)
        words += item
        return words
      }
    }

利用队列实现按键解密

首先是要需要在页面上监听到键盘的按键我采用的是直接在document上增添监听函数

 document.addEventListener("keydown",keydown);
    function keydown(event){
           //监听到按键后的实践处理
    }

当然在这之前我是想直接在html标签上绑定onkeydown监听函数的如下

<!DOCTYPE html>
 
<html onkeydown="keydownTest(event)">         <!--对整个页面的侦测-->
	<head>
		<meta charset="utf-8">
		<title>键盘按键侦测</title>
    </head>
 
    <body>
        <script>
            function keydownTest(event){
                alert('zijing 你按下了' + event.keyCode);   //检测到键盘按键时调用
            }
        </script>
    </body>
</html>

但请注意 html 标签本身是没有焦点的,因此它通常不会接收键盘事件。所以,如果您在 html 标签上使用 onkeydown 属性来处理按键事件,可能无法正常工作。不过,一些浏览器(例如 Chrome)可能会将键盘事件发送到 html 标签,即使它没有焦点,这是因为它们在处理键盘事件时采用了不同的策略。但是,这并不是标准行为,也不是所有浏览器都支持这种行为,因此建议您不要仅仅依赖 html 标签来处理键盘事件。当然你可以在一个文本框或按钮等会获取到焦点的元素上使用(如果需要在整个页面中处理按键事件可以在body上使用,body 标签是一个可以接收焦点的元素)或者采用 window.event.keyCode这个方法来获取键盘值。但也请注意,window.event 属性在现代浏览器中已经被弃用。如果您需要在旧版本的 Internet Explorer 浏览器中支持键盘事件,可以使用 window.event.keyCode 属性,但是最好尽可能地避免使用它。
接下来则是解密实践代码实现

    let queue = new Queue()
    const key = '383840403739373966656665' //上上下下左右左右baba
    document.addEventListener("keydown",keydown);
    function keydown(event){          
            if(queue.length == 12){
              console.log(queue.toString())
              queue.dequeue()
            }
            queue.enqueue(event.keyCode)      
            if(queue.toString() == key)
              alert('请我喝杯奶茶')
    }

完整键码表

字母和数字键的键码值

按键键码按键键码
A65J74
B66K75
C67L76
D68M77
E69N78
F70O79
G71P80
H72Q81
I73R82
S83149
T84250
U85351
V86452
W87553
X88654
Y89755
Z90856
048957

数字键盘上的键的键码值

按键键码按键键码
0968104
1979105
298*106
399+107
4100Enter108
5101-109
6102.110
7103/111

功能键键码值

按键键码按键键码
F1112F7118
F2113F8119
F3114F9120
F4115F10121
F5116F11122
F6117F12123

控制键键码值

按键键码按键键码
BackSpace8Esc27
Tab9Spacebar 32
Clear12Page Up 33
Enter13Page Down 34
Shift16End 35
Control17Home 36
Alt18Left Arrow 37
Cape Lock20Up Arrow 38
Right Arrow39-_ 189
Dw Arrow40.> 190
Insert45/? 191
Delete46`~ 192
Num Lock144[{ 219
;:186| 220
=+187]} 221
,<188'" 222

多媒体键码值

按键键码
音量加175
音量减174
停止179
静音173
浏览器172
邮件180
搜索170
收藏171