JS实现电脑虚拟键盘的操作


Posted in Javascript onJune 24, 2020

本文实例为大家分享了JS实现电脑虚拟键盘的具体代码,供大家参考,具体内容如下

需求:

1.当输入框光标聚焦时,电脑虚拟键盘弹出

JS实现电脑虚拟键盘的操作

JS实现电脑虚拟键盘的操作

2.在输入框输入内容时,键盘跟着变化

JS实现电脑虚拟键盘的操作

具体实现代码如下:

Html部分:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <link rel="stylesheet" href="https://cdn.staticfile.org/font-awesome/4.7.0/css/font-awesome.css" rel="external nofollow" >
 <link rel="stylesheet" href="./index.css" >
 <title>电脑键盘的实现</title>
</head>
<body>
 <div class="input_box">
 <input type="text" id="myinput" placeholder="点击输入框弹出键盘" value=""/>
 </div>
 <div class="keyBoard">
 
 </div>
 <script src="./jquery-1.11.0.min.js"></script>
 <script src="./index.js"></script>
 
 <script>
 


 </script>
</body>
</html>

CSS部分:

body * {
 margin: 0;
 padding: 0;
 box-sizing: border-box;
 font-family: Arial, Helvetica, sans-serif;
}
.keyBoard{
 max-width: 800px;
 padding: 20px;
 position: absolute;
 top: 50%;
 left: 50%;
 transform: translate(-50%, -50%);
 background-color: rgb(197, 197, 197);
 border-radius: 10px;
 display: none;
 grid-template-columns: repeat(30, 15px);
 grid-template-rows: repeat(5, 35px);
 grid-gap: 5px;

}
.key {
 background-color: rgb(243, 243, 243);
 border: 2px solid black;
 border-radius: 5px;
 grid-column: span 2;
 font-size: 12px;
 text-align: center;
 /* padding-top: 17px; */
 cursor: pointer;
 line-height: 35px;
 font-weight: 700;
}

.key:hover {
 border: 1px solid #eeeeee;
 
 
}

.backspace {
 grid-column: span 4;
}

.tab {
 grid-column: span 3;
}

.backslash {
 grid-column: span 3;
}

.capslock {
 grid-column: span 4;
}

.enter {
 grid-column: span 4;
}

.leftshift {
 grid-column: span 5;
}

.rightshift {
 grid-column: span 5;
}

.leftctrl {
 grid-column: span 3;
}

.microsoft {
 grid-column: span 3;
 font-size: 14px;
 
}

.space {
 grid-column: span 13;
}
.input_box{
 width: 400px;
 height: 60px;
 /* border: 1px solid black; */
 margin: auto;
 margin-top: 100px;
}
.input_box input{
 outline: none;
 border: none;
 width: 100%;
 height: 100%;
 border: 2px solid #ccc;
 border-radius: 8px;
 padding: 10px;
 font-size: 30px;
}

JS部分

var keyArray = [
 { 'key_name': '`', 'key_val': '192' },
 { 'key_name': '1', 'key_val': '49' },
 { 'key_name': '2', 'key_val': '50' },
 { 'key_name': '3', 'key_val': '51' },
 { 'key_name': '4', 'key_val': '52' },
 { 'key_name': '5', 'key_val': '53' },
 { 'key_name': '6', 'key_val': '54' },
 { 'key_name': '7', 'key_val': '55' },
 { 'key_name': '8', 'key_val': '56' },
 { 'key_name': '9', 'key_val': '57' },
 { 'key_name': '0', 'key_val': '48' },
 { 'key_name': '-', 'key_val': '189' },
 { 'key_name': '=', 'key_val': '187' },
 { 'key_name': 'Backspace', 'key_val': '8' },

 { 'key_name': 'Tab', 'key_val': '9' },
 { 'key_name': 'Q', 'key_val': '81' },
 { 'key_name': 'W', 'key_val': '87' },
 { 'key_name': 'E', 'key_val': '69' },
 { 'key_name': 'R', 'key_val': '82' },
 { 'key_name': 'T', 'key_val': '84' },
 { 'key_name': 'Y', 'key_val': '89' },
 { 'key_name': 'U', 'key_val': '85' },
 { 'key_name': 'I', 'key_val': '73' },
 { 'key_name': 'O', 'key_val': '79' },
 { 'key_name': 'P', 'key_val': '80' },
 { 'key_name': '[', 'key_val': '219' },
 { 'key_name': ']', 'key_val': '221' },
 { 'key_name': "\\ ", 'key_val': '220' },

 { 'key_name': 'CapsLock', 'key_val': '20' },
 { 'key_name': 'A', 'key_val': '65' },
 { 'key_name': 'S', 'key_val': '83' },
 { 'key_name': 'D', 'key_val': '68' },
 { 'key_name': 'F', 'key_val': '70' },
 { 'key_name': 'G', 'key_val': '71' },
 { 'key_name': 'H', 'key_val': '72' },
 { 'key_name': 'J', 'key_val': '74' },
 { 'key_name': 'K', 'key_val': '75' },
 { 'key_name': 'L', 'key_val': '76' },
 { 'key_name': ';', 'key_val': '186' },
 { 'key_name': "'", 'key_val': '222' },
 { 'key_name': 'Enter', 'key_val': '13' },

 { 'key_name': 'Shift', 'key_val': '16' },
 { 'key_name': 'Z', 'key_val': '90' },
 { 'key_name': 'X', 'key_val': '88' },
 { 'key_name': 'C', 'key_val': '67' },
 { 'key_name': 'V', 'key_val': '86' },
 { 'key_name': 'B', 'key_val': '66' },
 { 'key_name': 'N', 'key_val': '78' },
 { 'key_name': 'M', 'key_val': '77' },
 { 'key_name': ',', 'key_val': '188' },
 { 'key_name': '.', 'key_val': '190' },
 { 'key_name': '/', 'key_val': '191' },
 { 'key_name': 'Shift', 'key_val': '16' },

 { 'key_name': 'Ctrl', 'key_val': '17' },
 { 'key_name': 'Alt', 'key_val': '18' },
 { 'key_name': 'Home', 'key_val': '36 ' },
 { 'key_name': 'Space', 'key_val': '32' },
 { 'key_name': 'Home', 'key_val': '36' },
 { 'key_name': 'Alt', 'key_val': '18' },
 { 'key_name': 'Ctrl', 'key_val': '17' },
 { 'key_name': 'Fn', 'key_val': '00' },

]
var keyBoard = document.getElementsByClassName('keyBoard')[0]
function renderKeyBoard(keyArray) {
 var template = '';
 for (var i = 0; i < keyArray.length; i++) {
 if (keyArray[i].key_val == '8') {
  template += "<div class='key backspace' data-key='" + keyArray[i].key_val + "'>" + keyArray[i].key_name + "</div>";
 } else if (keyArray[i].key_val == '9') {
  template += "<div class='key tab' data-key='" + keyArray[i].key_val + "'>" + keyArray[i].key_name + "</div>";
 } else if (keyArray[i].key_val == '220') {
  template += "<div class='key backslash' data-key='" + keyArray[i].key_val + "'>" + keyArray[i].key_name + "</div>";
 } else if (keyArray[i].key_val == '20') {
  template += "<div class='key capslock' data-key='" + keyArray[i].key_val + "'>" + keyArray[i].key_name + "</div>";
 } else if (keyArray[i].key_val == '13') {
  template += "<div class='key enter' data-key='" + keyArray[i].key_val + "'>" + keyArray[i].key_name + "</div>";
 } else if (keyArray[i].key_val == '16') {
  template += "<div class='key leftshift' data-key='" + keyArray[i].key_val + "'>" + keyArray[i].key_name + "</div>";
 } else if (keyArray[i].key_val == '16') {
  template += "<div class='key rightshift' data-key='" + keyArray[i].key_val + "'>" + keyArray[i].key_name + "</div>";
 } else if (keyArray[i].key_val == '17') {
  template += "<div class='key leftctrl' data-key='" + keyArray[i].key_val + "'>" + keyArray[i].key_name + "</div>";
 } else if (keyArray[i].key_val == '36') {
  template += "<div class='key microsoft' data-key='" + keyArray[i].key_val + "'>" + keyArray[i].key_name + "</div>";
 }
 else if (keyArray[i].key_val == '32') {
  template += "<div class='key space' data-key='" + keyArray[i].key_val + "'>" + keyArray[i].key_name + "</div>";
 }
 else {
  template += "<div class='key' data-key='" + keyArray[i].key_val + "'>" + keyArray[i].key_name + "</div>";
 }


 }
 // console.log(template)
 keyBoard.innerHTML = template;
}
renderKeyBoard(keyArray)
var key_div = document.getElementsByClassName('key');
// console.log(key_div)
$("#myinput").on("focus", function (e) {
 // console.log(e.keyCode)
 keyBoard.style.display = 'grid'

});
$("#myinput").on("keydown", function (e) {
 console.log(e.target.value)
 if(e.target.value != ''){
 for (var i = 0; i < key_div.length; i++) {
 var key_val = Number(key_div[i].getAttribute('data-key'));
 if (key_val === e.keyCode) {
  key_div[i].style.color = '#fff';
  key_div[i].style.backgroundColor = '#9F79EE'
 } else {
  key_div[i].style.color = ''
  key_div[i].style.backgroundColor = ''
 }
 }
 }

});
$("#myinput").on("keyup", function (e) {
 for (var i = 0; i < key_div.length; i++) {
 key_div[i].style.color = ''
 key_div[i].style.backgroundColor = ''
 }

});
$("#myinput").on("blur", function (e) {
 // console.log(e.keyCode)
 keyBoard.style.display = 'none'

});

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript获得选中文本内容的方法
Dec 02 Javascript
jQuery生成asp.net服务器控件的代码
Feb 04 Javascript
关于递归运算的顺序测试代码
Nov 30 Javascript
Javascript中3种实现继承的方法和代码实例
Aug 12 Javascript
jquery利用拖拽方式在图片上添加热链接
Nov 24 Javascript
Highcharts入门之基本属性
Aug 02 Javascript
关于Function中的bind()示例详解
Dec 02 Javascript
js实现选项卡内容切换以及折叠和展开效果【推荐】
Jan 08 Javascript
详解Vue项目部署遇到的问题及解决方案
Jan 11 Javascript
Vue实现类似Spring官网图片滑动效果方法
Mar 01 Javascript
vue中 数字相加为字串转化为数值的例子
Nov 07 Javascript
JS函数参数的传递与同名参数实例分析
Mar 16 Javascript
基于PHP pthreads实现多线程代码实例
Jun 24 #Javascript
js实现html滑动图片拼图验证
Jun 24 #Javascript
微信小程序的引导页实现代码
Jun 24 #Javascript
微信小程序仿抖音短视频切换效果的实例代码
Jun 24 #Javascript
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
Jun 24 #Javascript
javascript实现前端成语点击验证优化
Jun 24 #Javascript
vue各种事件监听实例(小结)
Jun 24 #Javascript
You might like
php mysql数据库操作分页类
2008/06/04 PHP
php修改NetBeans默认字体的大小
2013/07/02 PHP
destoon实现VIP排名一直在前面排序的方法
2014/08/21 PHP
CI框架AR数据库操作常用函数总结
2016/11/21 PHP
javascript采用数组实现tab菜单切换效果
2012/12/12 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
原生js实现淘宝首页点击按钮缓慢回到顶部效果
2014/04/06 Javascript
js实现格式化金额,字符,时间的方法
2015/02/26 Javascript
jquery获取节点名称
2015/04/26 Javascript
微信浏览器内置JavaScript对象WeixinJSBridge使用实例
2015/05/25 Javascript
基于jQuery实现动态搜索显示功能
2016/05/05 Javascript
JavaScript 节流函数 Throttle 详解
2016/07/04 Javascript
js实现楼层效果的简单实例
2016/07/15 Javascript
js获取元素下的第一级子元素的方法(推荐)
2017/03/05 Javascript
Cropper.js 实现裁剪图片并上传(PC端)
2017/08/20 Javascript
nodejs使用express获取get和post传值及session验证的方法
2017/11/09 NodeJs
vue-cli2.9.3 详细教程
2018/04/23 Javascript
微信小程序实时聊天WebSocket
2018/07/05 Javascript
详解搭建es6+devServer简单开发环境
2018/09/25 Javascript
JavaScript实现无限级递归树的示例代码
2019/03/29 Javascript
vue项目中使用bpmn-自定义platter的示例代码
2020/05/11 Javascript
[01:27:43]VGJ.S vs TNC Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
Python enumerate遍历数组示例应用
2008/09/06 Python
Python的Django框架中的Context使用
2015/07/15 Python
详解Python的Flask框架中的signals信号机制
2016/06/13 Python
使用Python制作自动推送微信消息提醒的备忘录功能
2018/09/06 Python
CSS3实现3D翻书效果
2016/06/20 HTML / CSS
常用的HTML5列表标签
2017/06/20 HTML / CSS
怎样声明子类
2013/07/02 面试题
英语自荐信常用语句
2013/12/13 职场文书
开业庆典邀请函
2014/01/08 职场文书
教学大赛获奖感言
2014/01/15 职场文书
机关会计岗位职责
2014/04/08 职场文书
毕业论文评语大全
2014/04/29 职场文书
阿甘正传观后感
2015/06/01 职场文书
利用Nginx代理如何解决前端跨域问题详析
2021/04/02 Servers