利用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('请我喝杯奶茶')
}
完整键码表
字母和数字键的键码值
| 按键 | 键码 | 按键 | 键码 |
|---|---|---|---|
| A | 65 | J | 74 |
| B | 66 | K | 75 |
| C | 67 | L | 76 |
| D | 68 | M | 77 |
| E | 69 | N | 78 |
| F | 70 | O | 79 |
| G | 71 | P | 80 |
| H | 72 | Q | 81 |
| I | 73 | R | 82 |
| S | 83 | 1 | 49 |
| T | 84 | 2 | 50 |
| U | 85 | 3 | 51 |
| V | 86 | 4 | 52 |
| W | 87 | 5 | 53 |
| X | 88 | 6 | 54 |
| Y | 89 | 7 | 55 |
| Z | 90 | 8 | 56 |
| 0 | 48 | 9 | 57 |
数字键盘上的键的键码值
| 按键 | 键码 | 按键 | 键码 |
|---|---|---|---|
| 0 | 96 | 8 | 104 |
| 1 | 97 | 9 | 105 |
| 2 | 98 | * | 106 |
| 3 | 99 | + | 107 |
| 4 | 100 | Enter | 108 |
| 5 | 101 | - | 109 |
| 6 | 102 | . | 110 |
| 7 | 103 | / | 111 |
功能键键码值
| 按键 | 键码 | 按键 | 键码 |
|---|---|---|---|
| F1 | 112 | F7 | 118 |
| F2 | 113 | F8 | 119 |
| F3 | 114 | F9 | 120 |
| F4 | 115 | F10 | 121 |
| F5 | 116 | F11 | 122 |
| F6 | 117 | F12 | 123 |
控制键键码值
| 按键 | 键码 | 按键 | 键码 |
|---|---|---|---|
| BackSpace | 8 | Esc | 27 |
| Tab | 9 | Spacebar 32 | |
| Clear | 12 | Page Up 33 | |
| Enter | 13 | Page Down 34 | |
| Shift | 16 | End 35 | |
| Control | 17 | Home 36 | |
| Alt | 18 | Left Arrow 37 | |
| Cape Lock | 20 | Up Arrow 38 | |
| Right Arrow | 39 | -_ 189 | |
| Dw Arrow | 40 | .> 190 | |
| Insert | 45 | /? 191 | |
| Delete | 46 | `~ 192 | |
| Num Lock | 144 | [{ 219 | |
| ;: | 186 | | 220 | |
| =+ | 187 | ]} 221 | |
| ,< | 188 | '" 222 |
多媒体键码值
| 按键 | 键码 |
|---|---|
| 音量加 | 175 |
| 音量减 | 174 |
| 停止 | 179 |
| 静音 | 173 |
| 浏览器 | 172 |
| 邮件 | 180 |
| 搜索 | 170 |
| 收藏 | 171 |