JavaWeb综合案例-键盘模拟

简介:

学完了JavaScript之后,自己突发奇想,想写一个模拟键盘的小程序。代码如下:

程序特色:

  1. 按下按键打印对应的keyCode值,并且对应的键会变色,键升起又会恢复颜色。

  2. 按下按键语音对应的键名(采用audio标签,这是HTML5的新标签)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
<!doctype html>
<html lang= "en" >
  <!--
  需求:通过键盘点击,结合键盘事件来模拟按下了哪个键。
     onkeydown
  onkeyup
  思路:
  1.在onload事件中创建键盘视图
  2.定义一个输入框来接收和触发键盘事件
  3.同时返回按下的那个键的keyCode值
  
  -->
  <head>
   <meta charset= "UTF-8" >
   <meta name= "Generator"  content= "EditPlus" >
   <meta name= "Author"  content= "" >
   <meta name= "Keywords"  content= "" >
   <meta name= "Description"  content= "" >
   <title>模拟键盘</title>
   <style type= "text/css" >
   /*键盘外边框格式*/
   #keycontainer{
    border:3px solid red;
    padding:50px 50px;
   }
   /*每个按键的格式*/
   span{
    border:1px solid red;
    background:black;
    width:50px;
    color:white;
    font-size:1cm;
    display:inline-block;
    padding:1px;
   }
   /*输入框的格式*/
   #input{
    border:1px solid red;
   }
   </style>
  </head>
  <body onload= "initView();" >
   <marquee behavior= "alternate" ><font size= "6"  color= "BlueViolet"  ><b>键盘测试程序&nbsp;&nbsp;&nbsp;作者:陈章&nbsp;&nbsp;&nbsp;黑马程序员【Android70期】</b></font></marquee> 
   <div id= "keycontainer" ></div>
   <hr/>
   请在下面的文本框中按下任意一个键<br/>
   <input type= "text"  id= "input"   onkeydown= "keydown(event);"   onkeyup= "keyup(event);" />
   <!--播放音频-->
   <audio id= "soundplayer" >您的浏览器不支持audio元素</audio>
  </body>
  <script type= "text/javascript" >
  //工具函数
   function  outln(str)
  {
   document.writeln(str);
  }
  
  function  out(str)
  {
   document.write(str);
  }
  
  
  function  byID(id)
  {
   return  document.getElementById(id);
  }
  
  var  colorBefore;
  //获取音频播放器
  var  soundplayer = byID( "soundplayer" );
  
  //封装播放功能
  function  playsrc(src)
  {
   soundplayer.src = src ;
   soundplayer.play();
  }
  function  byName(name)
  {
   return  document.getElementsByName(name)[0];
  }
   
   function  keydown(e)
   {
   //遍历键盘的各个键,看哪个的值与键盘按下的值相匹配。
    var  keys = document.getElementsByTagName( "span" );
    for ( var  i = 0; i < keys.length; i++)
    {
    var  each = keys[i];
    if (each.innerHTML == String.fromCharCode(e.keyCode))
     {
     //播放对应的音频----这个功能受浏览器兼容性影响,UC/360验证可使。
     playsrc( "recordings/"  + String.fromCharCode(e.keyCode) + ".wav" );
     colorBefore = each.style.backgroundColor;
     each.style.backgroundColor =  "blue" ;
     return ;
     }
     playsrc(  "recordings/UDK.wav"  );
    }
   }
 
   function  keyup(e){
   //遍历键盘的各个键,看哪个的值与键盘按下的值相匹配。
    var  keys = document.getElementsByTagName( "span" );
    for ( var  i = 0; i < keys.length; i++)
    {
    var  each = keys[i];
    if (each.innerHTML == String.fromCharCode(e.keyCode))
     {
     each.style.backgroundColor = colorBefore;
     byID( "input" ).value=String.fromCharCode(e.keyCode) +  " keyCode值:"  + e.keyCode;
     return ;
     }
     //如果按下的键没有的话
    byID( "input" ).value=   "? keyCode值:"  + e.keyCode;
    }
   }
   // <!--初始化键盘视图-->
   
   function  initView()
   {
    var  main = byID( "keycontainer" );
    var  s =  "" ;
    s +=  "<span >Q</span >&nbsp;&nbsp;" ;
    s +=  "<span >W</span>&nbsp;&nbsp;" ;
    s +=  "<span >E</span>&nbsp;&nbsp;" ;
    s +=  "<span >R</span>&nbsp;&nbsp;" ;
    s +=  "<span >T</span>&nbsp;&nbsp;" ;
    s +=  "<span >Y</span>&nbsp;&nbsp;" ;
    s +=  "<span >U</span>&nbsp;&nbsp;" ;
    s +=  "<span >I</span>&nbsp;&nbsp;" ;
    s +=  "<span >O</span>&nbsp;&nbsp;" ;
    s +=  "<span >P</span>&nbsp;&nbsp;<br/><br/>" ;
    s +=  "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span >A</span>&nbsp;&nbsp;" ;
    s +=  "<span >S</span>&nbsp;&nbsp;" ;
    s +=  "<span >D</span>&nbsp;&nbsp;" ;
    s +=  "<span >F</span>&nbsp;&nbsp;" ;
    s +=  "<span >G</span>&nbsp;&nbsp;" ;
    s +=  "<span >H</span>&nbsp;&nbsp;" ;
    s +=  "<span >J</span>&nbsp;&nbsp;" ;
    s +=  "<span >K</span>&nbsp;&nbsp;" ;
    s +=  "<span >L</span>&nbsp;&nbsp;<br/><br/>" ;
    s +=  "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span >Z</span>&nbsp;&nbsp;" ;
    s +=  "<span >X</span>&nbsp;&nbsp;" ;
    s +=  "<span >C</span>&nbsp;&nbsp;" ;
    s +=  "<span >V</span>&nbsp;&nbsp;" ;
    s +=  "<span >B</span>&nbsp;&nbsp;" ;
    s +=  "<span >N</span>&nbsp;&nbsp;" ;
    s +=  "<span >M</span>&nbsp;&nbsp;" ;
    main.innerHTML = s;
  
    
  </script>
</html>

程序在桔子浏览器中运行之后效果如下:

wKioL1WNchnzQtumAAQs_rMWFJE806.jpg

当按下A-Z字母时,会显示字母和对应的keyCode值;其它的键会显示?和keyCode值。


      本文转自屠夫章哥  51CTO博客,原文链接:http://blog.51cto.com/4259297/1666096,如需转载请自行联系原作者








相关文章
|
4月前
|
JavaScript Java 大数据
基于JavaWeb的销售管理系统设计系统
本系统基于Java、MySQL、Spring Boot与Vue.js技术,构建高效、可扩展的销售管理平台,实现客户、订单、数据可视化等全流程自动化管理,提升企业运营效率与决策能力。
|
6月前
|
安全 Java API
Java 集合高级应用与实战技巧之高效运用方法及实战案例解析
本课程深入讲解Java集合的高级应用与实战技巧,涵盖Stream API、并行处理、Optional类、现代化Map操作、不可变集合、异步处理及高级排序等核心内容,结合丰富示例,助你掌握Java集合的高效运用,提升代码质量与开发效率。
297 0
|
6月前
|
SQL 前端开发 Java
JavaWeb 学习日记案例详解及 javaweb 完整项目案例实战指南
本文介绍了一个基于Spring Boot的JavaWeb企业员工管理系统完整案例,涵盖部门管理、员工管理、登录、异常处理、事务管理及AOP等核心功能实现,结合CSDN相关技术文章,提供详细技术方案与应用实例,适合JavaWeb开发者学习与参考。
389 0
|
6月前
|
安全 JavaScript Java
java Web 项目完整案例实操指南包含从搭建到部署的详细步骤及热门长尾关键词解析的实操指南
本项目为一个完整的JavaWeb应用案例,采用Spring Boot 3、Vue 3、MySQL、Redis等最新技术栈,涵盖前后端分离架构设计、RESTful API开发、JWT安全认证、Docker容器化部署等内容,适合掌握企业级Web项目全流程开发与部署。
520 0
|
7月前
|
缓存 算法 NoSQL
校招 Java 面试高频常见知识点深度解析与实战案例详细分享
《2025校招Java面试核心指南》总结了Java技术栈的最新考点,涵盖基础语法、并发编程和云原生技术三大维度: 现代Java特性:重点解析Java 17密封类、Record类型及响应式Stream API,通过电商案例演示函数式数据处理 并发革命:对比传统线程池与Java 21虚拟线程,详解Reactor模式在秒杀系统中的应用及背压机制 云原生实践:提供Spring Boot容器化部署方案,分析Spring WebFlux响应式编程和Redis Cluster缓存策略。
200 0
|
7月前
|
人工智能 Java API
Java 生态大模型应用开发全流程实战案例与技术路径终极对决
在Java生态中开发大模型应用,Spring AI、LangChain4j和JBoltAI是三大主流框架。本文从架构设计、核心功能、开发体验、性能扩展性、生态社区等维度对比三者特点,并结合实例分析选型建议。Spring AI适合已有Spring技术栈团队,LangChain4j灵活性强适用于学术研究,JBoltAI提供开箱即用的企业级解决方案,助力传统系统快速AI化改造。开发者可根据业务场景和技术背景选择最适合的框架。
1492 2
|
7月前
|
自然语言处理 前端开发 Java
JBoltAI 框架完整实操案例 在 Java 生态中快速构建大模型应用全流程实战指南
本案例基于JBoltAI框架,展示如何快速构建Java生态中的大模型应用——智能客服系统。系统面向电商平台,具备自动回答常见问题、意图识别、多轮对话理解及复杂问题转接人工等功能。采用Spring Boot+JBoltAI架构,集成向量数据库与大模型(如文心一言或通义千问)。内容涵盖需求分析、环境搭建、代码实现(知识库管理、核心服务、REST API)、前端界面开发及部署测试全流程,助你高效掌握大模型应用开发。
747 5
|
7月前
|
缓存 Java API
Java 集合容器实操技巧与案例详解
本教程基于Java 8+新特性和现代开发实践,深入讲解Java集合容器的实操技巧。通过具体场景演示Stream API数据处理、ConcurrentHashMap并发控制、LinkedHashMap实现LRU缓存、TreeSet自定义排序等高级特性。同时涵盖computeIfAbsent优化操作、EnumMap专用集合使用、集合统计与运算(交集、并集、差集)等内容。代码示例丰富,助力掌握高效编程方法。[点击获取完整代码](https://pan.quark.cn/s/14fcf913bae6)。
102 0
|
7月前
|
前端开发 JavaScript Java
Java 学习路线规划及项目案例中的技术栈应用解析
内容包括:**Java 17核心特性**(如sealed class、record)与模块化开发;Spring Boot 3 + Spring Cloud微服务架构,涉及响应式编程(WebFlux)、多数据库持久化(JPA、R2DBC、MongoDB);云原生技术**如Docker、Kubernetes及CI/CD流程;性能优化(GraalVM Native Image、JVM调优);以及前后端分离开发(Vue 3、Spring Boot集成)。通过全栈电商平台项目实战,掌握从后端服务(用户、商品、订单)到前端应用(Vue 3、React Native)的全流程开发。
324 9
|
7月前
|
存储 Java 数据安全/隐私保护
Java技术栈揭秘:Base64加密和解密文件的实战案例
以上就是我们今天关于Java实现Base64编码和解码的实战案例介绍。希望能对你有所帮助。还有更多知识等待你去探索和学习,让我们一同努力,继续前行!
530 5