LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

原生js制作虚拟键盘,附源码

admin
2026年1月31日 13:35 本文热度 72

  

效果展示  


  完整源码  


HTML
<!DOCTYPE html><html><head>    <meta charset="utf-8" >    <title>虚拟键盘</title>    <style>        #inputArea{position: absolute; top30%left20%;}        .keyboardBox{position: fixed; top50%left20%width708pxheight256pxmargin0padding10pxbackground-color#cccfont-size16px;}        .line{position: relative; height50pxline-height50px;}        .keys.keysCmd.keys_d{box-sizing: border-box; float: left; width45pxheight45pxline-height45pxmargin0 0 3px 3pxborder-radius4pxborder1px solid #333text-align: center; cursor: pointer; background-color#fff;}        .keys:hover.keysCmd:hover.keys_d:hover{box-shadow0px 0px 3px #333 inset;}        .keys:active.keysCmd:active.keys_d:active{background-color#dedede;}        .active{background-color#dededebox-shadow0px 0px 3px #333 inset;}        .keys_d{height45pxline-height20px;}        .key_enter{width102px;}        .k-w-50{width50px;}        .k-w-70{width70px;}        .k-w-75{width75px;}        .k-w-80{width80px;}        .k-w-100{width100px;}        .k-w-120{width120px;}        .k-w-704{width704px;}        .gap{margin-left30px;}        .gap_t{margin-top10px;}        .line .l-h-40{line-height40px;}        .f-s-14{font-size14px;}        .t-a-l{padding-left15pxtext-align: left;}    </style></head><body><textarea name="inputArea" id="inputArea" cols="80" rows="10" placeholder="点击虚拟键盘输入"></textarea>
<div class="keyboardBox" id="keyboard">    <div class="line gap_t">        <div class="keys_d t-a-l" data-kid="192"><div>~</div><div>`</div></div>        <div class="keys_d t-a-l" data-kid="49"><div>!</div><div>1</div></div>        <div class="keys_d t-a-l" data-kid="50"><div>@</div><div>2</div></div>        <div class="keys_d t-a-l" data-kid="51"><div>#</div><div>3</div></div>        <div class="keys_d t-a-l" data-kid="52"><div>$</div><div>4</div></div>        <div class="keys_d t-a-l" data-kid="53"><div>%</div><div>5</div></div>        <div class="keys_d t-a-l" data-kid="54"><div>^</div><div>6</div></div>        <div class="keys_d t-a-l" data-kid="55"><div>&amp;</div><div>7</div></div>        <div class="keys_d t-a-l" data-kid="56"><div>*</div><div>8</div></div>        <div class="keys_d t-a-l" data-kid="57"><div>(</div><div>9</div></div>        <div class="keys_d t-a-l" data-kid="48"><div>)</div><div>0</div></div>        <div class="keys_d t-a-l" data-kid="189"><div>_</div><div>-</div></div>        <div class="keys_d t-a-l" data-kid="187"><div>+</div><div>=</div></div>        <div class="keysCmd k-w-80 l-h-40 f-s-14" data-kid="8">Backspace</div>    </div>    <div class="line">        <div class="keysCmd k-w-50" data-kid="9">Tab</div>        <div class="keys" data-kid="81">Q</div>        <div class="keys" data-kid="87">W</div>        <div class="keys" data-kid="69">E</div>        <div class="keys" data-kid="82">R</div>        <div class="keys" data-kid="84">T</div>        <div class="keys" data-kid="89">Y</div>        <div class="keys" data-kid="85">U</div>        <div class="keys" data-kid="73">I</div>        <div class="keys" data-kid="79">O</div>        <div class="keys" data-kid="80">P</div>        <div class="keys_d t-a-l" data-kid="219"><div>{</div><div>[</div></div>        <div class="keys_d t-a-l" data-kid="221"><div>}</div><div>]</div></div>        <div class="keys_d k-w-75 t-a-l" data-kid="220"><div>|</div><div>\</div></div>    </div>    <div class="line">        <div class="keysCmd k-w-70 f-s-14" data-kid="20">CapsLock</div>        <div class="keys" data-kid="65">A</div>        <div class="keys" data-kid="83">S</div>        <div class="keys" data-kid="68">D</div>        <div class="keys" data-kid="70">F</div>        <div class="keys" data-kid="71">G</div>        <div class="keys" data-kid="72">H</div>        <div class="keys" data-kid="74">J</div>        <div class="keys" data-kid="75">K</div>        <div class="keys" data-kid="76">L</div>        <div class="keys_d t-a-l" data-kid="186"><div>:</div><div>;</div></div>        <div class="keys_d t-a-l" data-kid="222"><div>"</div><div>'</div></div>        <div class="keysCmd key_enter" data-kid="13">Enter</div>    </div>    <div class="line">        <div class="keysCmd k-w-100" data-kid="16">Shift</div>        <div class="keys" data-kid="90">Z</div>        <div class="keys" data-kid="88">X</div>        <div class="keys" data-kid="67">C</div>        <div class="keys" data-kid="86">V</div>        <div class="keys" data-kid="66">B</div>        <div class="keys" data-kid="78">N</div>        <div class="keys" data-kid="77">M</div>        <div class="keys_d t-a-l" data-kid="188"><div><</div><div>,</div></div>        <div class="keys_d t-a-l" data-kid="190"><div>></div><div>.</div></div>        <div class="keys_d t-a-l" data-kid="191"><div>?</div><div>/</div></div>        <div class="keysCmd k-w-120" data-kid="16">Shift</div>    </div>    <div class="line">        <div class="keys k-w-704" data-kid="32">&nbsp;</div>    </div></div><script type="text/javascript" src="keyboard.js"></script><script>window.onload = function(){    new keyboard().addKeyboard('inputArea');}</script></body></html>
JS
//* keyboard.js
var keyboard = (function(){    var keyboardObj = document.getElementById('keyboard'), _inputID, _shiftStatus = false, _capsLock = false;
    // 显示虚拟键盘    var _showKeyboard = function(){        keyboardObj.style.display = 'block';    }    // 隐藏虚拟键盘    var _hideKeyboard = function(){        keyboardObj.style.display = 'none';    }
    // 获取输入框的内容    var _getInputContent = function(){        var inputContent = document.getElementById(_inputID).innerText || document.getElementById(_inputID).textContent;        return inputContent;    }    // 输入新内容    var _inputNewContent = function(str){        document.getElementById(_inputID).innerHTML = str;    }
    // 添加classname    function _addClass(obj, cls){        var obj_class = obj.className,        blank = obj_class != '' ? ' ' : '';        var added = obj_class + blank + cls;        obj.className = added;
    }    // 删除classname    function _removeClass(obj, cls){        var obj_class = ' ' + obj.className + ' ';        obj_class = obj_class.replace(/(\s+)/gi' ');        var removed = obj_class.replace(' ' + cls + ' '' ');        removed = removed.replace(/(^\s+)|(\s+$)/g'');        obj.className = removed;    }    // 为按钮添加active    function _addActive(cls, keycode){        var keys = document.getElementsByClassName(cls);        for(var o of keys){            if(o.getAttribute('data-kid') == keycode){                _addClass(o, 'active');            }        }    }    // 为按钮取消active    function _removeActive(cls, keycode){        var keys = document.getElementsByClassName(cls);        for(var o of keys){            if(o.getAttribute('data-kid') == keycode){                _removeClass(o, 'active');            }        }    }
    // 添加shift状态    var _addShift = function(){        _addActive('keysCmd'16);        return _shiftStatus = true;    }    // 取消shift状态    var _removeShift = function(){        _removeActive('keysCmd'16);        return _shiftStatus = false;    }
    // 添加CapsLock状态    var _addCapsLock = function(){        _addActive('keysCmd'20);        return _capsLock = true;    }    // 取消CapsLock状态    var _removeCapsLock = function(){        _removeActive('keysCmd'20);        return _capsLock = false;    }
    // 给按钮绑定触发键盘事件的事件    var _bindEvent = function(){        // 字母按键        var keys = keyboardObj.getElementsByClassName('keys');        for(var o of keys){            o.onclick = function(){                var strArr = _getInputContent().split('');                if(_shiftStatus){                    _capsLock = !_capsLock;                    _capsLock ? strArr.push(this.innerHTML.toUpperCase()) : strArr.push(this.innerHTML.toLowerCase());                    _capsLock = !_capsLock;                    _removeShift();                }                else{_capsLock ? strArr.push(this.innerHTML.toUpperCase()) : strArr.push(this.innerHTML.toLowerCase());}                _inputNewContent(strArr.join(''));            }        }        // 数字及特殊符号按键        var keys_d = document.getElementsByClassName('keys_d');        for(var o of keys_d){            o.onclick = function(){                var strArr = _getInputContent().split('');                var key1 = this.getElementsByTagName('div')[0].innerHTML;                var key2 = this.getElementsByTagName('div')[1].innerHTML;                if(_shiftStatus){                    strArr.push(key1);                    _removeShift();                }else{strArr.push(key2);}                _inputNewContent(strArr.join(''));            }        }
        // shift、capslock、enter、tab、backspace 按钮        var keysCmd = document.getElementsByClassName('keysCmd');        for(var o of keysCmd){            o.onclick = function(){                var strArr = _getInputContent().split('');                var keyCode = this.getAttribute('data-kid');                if(keyCode == 8){                    strArr.pop();                    _inputNewContent(strArr.join(''));                }else if(keyCode == 9){                    strArr.push('&nbsp;&nbsp;');                    _inputNewContent(strArr.join(''));                }else if(keyCode == 13){                    strArr.push('\n');                    _inputNewContent(strArr.join(''));                }else if(keyCode == 16){                    if(!_shiftStatus){_addShift();}else{_removeShift();}                }else if(keyCode == 20){                    if(!_capsLock){_addCapsLock();}else{_removeCapsLock();}                }            }        }    }
    var keyboard = function(){}
    // 输入框绑定键盘    keyboard.prototype.addKeyboard = function(id){        _inputID = id        var inputObj = document.getElementById(id);        inputObj.onclick = _showKeyboard();        _bindEvent();    }
    return keyboard;})()


阅读原文:原文链接


该文章在 2026/2/4 15:38:08 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved