zoukankan      html  css  js  c++  java
  • guacamole实现虚拟键盘

    要做的事情比较简单,就是先实例化一个虚拟键盘,然后监听事件即可。

    js代码

        //虚拟键盘数据
        var a = {"language":"en_US","type":"qwerty","width":22,"keys":{"0":[{"title":"0","requires":[]},{"title":")","requires":["shift"]}],"1":[{"title":"1","requires":[]},{"title":"!","requires":["shift"]}],"2":[{"title":"2","requires":[]},{"title":"@","requires":["shift"]}],"3":[{"title":"3","requires":[]},{"title":"#","requires":["shift"]}],"4":[{"title":"4","requires":[]},{"title":"$","requires":["shift"]}],"5":[{"title":"5","requires":[]},{"title":"%","requires":["shift"]}],"6":[{"title":"6","requires":[]},{"title":"^","requires":["shift"]}],"7":[{"title":"7","requires":[]},{"title":"&","requires":["shift"]}],"8":[{"title":"8","requires":[]},{"title":"*","requires":["shift"]}],"9":[{"title":"9","requires":[]},{"title":"(","requires":["shift"]}],"Back":65288,"Tab":65289,"Enter":65293,"Esc":65307,"Home":65360,"PgUp":65365,"PgDn":65366,"End":65367,"Ins":65379,"F1":65470,"F2":65471,"F3":65472,"F4":65473,"F5":65474,"F6":65475,"F7":65476,"F8":65477,"F9":65478,"F10":65479,"F11":65480,"F12":65481,"Del":65535,"Space":" ","Left":[{"title":"←","keysym":65361}],"Up":[{"title":"↑","keysym":65362}],"Right":[{"title":"→","keysym":65363}],"Down":[{"title":"↓","keysym":65364}],"Menu":[{"title":"Menu","keysym":65383}],"LShift":[{"title":"Shift","modifier":"shift","keysym":65505}],"RShift":[{"title":"Shift","modifier":"shift","keysym":65506}],"LCtrl":[{"title":"Ctrl","modifier":"control","keysym":65507}],"RCtrl":[{"title":"Ctrl","modifier":"control","keysym":65508}],"Caps":[{"title":"Caps","modifier":"caps","keysym":65509}],"LAlt":[{"title":"Alt","modifier":"alt","keysym":65513}],"RAlt":[{"title":"Alt","modifier":"alt","keysym":65514}],"Super":[{"title":"Super","modifier":"super","keysym":65515}],"`":[{"title":"`","requires":[]},{"title":"~","requires":["shift"]}],"-":[{"title":"-","requires":[]},{"title":"_","requires":["shift"]}],"=":[{"title":"=","requires":[]},{"title":"+","requires":["shift"]}],",":[{"title":",","requires":[]},{"title":"<","requires":["shift"]}],".":[{"title":".","requires":[]},{"title":">","requires":["shift"]}],"/":[{"title":"/","requires":[]},{"title":"?","requires":["shift"]}],"[":[{"title":"[","requires":[]},{"title":"{","requires":["shift"]}],"]":[{"title":"]","requires":[]},{"title":"}","requires":["shift"]}],"\":[{"title":"\","requires":[]},{"title":"|","requires":["shift"]}],";":[{"title":";","requires":[]},{"title":":","requires":["shift"]}],"'":[{"title":"'","requires":[]},{"title":""","requires":["shift"]}],"q":[{"title":"q","requires":[]},{"title":"Q","requires":["caps"]},{"title":"Q","requires":["shift"]},{"title":"q","requires":["caps","shift"]}],"w":[{"title":"w","requires":[]},{"title":"W","requires":["caps"]},{"title":"W","requires":["shift"]},{"title":"w","requires":["caps","shift"]}],"e":[{"title":"e","requires":[]},{"title":"E","requires":["caps"]},{"title":"E","requires":["shift"]},{"title":"e","requires":["caps","shift"]}],"r":[{"title":"r","requires":[]},{"title":"R","requires":["caps"]},{"title":"R","requires":["shift"]},{"title":"r","requires":["caps","shift"]}],"t":[{"title":"t","requires":[]},{"title":"T","requires":["caps"]},{"title":"T","requires":["shift"]},{"title":"t","requires":["caps","shift"]}],"y":[{"title":"y","requires":[]},{"title":"Y","requires":["caps"]},{"title":"Y","requires":["shift"]},{"title":"y","requires":["caps","shift"]}],"u":[{"title":"u","requires":[]},{"title":"U","requires":["caps"]},{"title":"U","requires":["shift"]},{"title":"u","requires":["caps","shift"]}],"i":[{"title":"i","requires":[]},{"title":"I","requires":["caps"]},{"title":"I","requires":["shift"]},{"title":"i","requires":["caps","shift"]}],"o":[{"title":"o","requires":[]},{"title":"O","requires":["caps"]},{"title":"O","requires":["shift"]},{"title":"o","requires":["caps","shift"]}],"p":[{"title":"p","requires":[]},{"title":"P","requires":["caps"]},{"title":"P","requires":["shift"]},{"title":"p","requires":["caps","shift"]}],"a":[{"title":"a","requires":[]},{"title":"A","requires":["caps"]},{"title":"A","requires":["shift"]},{"title":"a","requires":["caps","shift"]}],"s":[{"title":"s","requires":[]},{"title":"S","requires":["caps"]},{"title":"S","requires":["shift"]},{"title":"s","requires":["caps","shift"]}],"d":[{"title":"d","requires":[]},{"title":"D","requires":["caps"]},{"title":"D","requires":["shift"]},{"title":"d","requires":["caps","shift"]}],"f":[{"title":"f","requires":[]},{"title":"F","requires":["caps"]},{"title":"F","requires":["shift"]},{"title":"f","requires":["caps","shift"]}],"g":[{"title":"g","requires":[]},{"title":"G","requires":["caps"]},{"title":"G","requires":["shift"]},{"title":"g","requires":["caps","shift"]}],"h":[{"title":"h","requires":[]},{"title":"H","requires":["caps"]},{"title":"H","requires":["shift"]},{"title":"h","requires":["caps","shift"]}],"j":[{"title":"j","requires":[]},{"title":"J","requires":["caps"]},{"title":"J","requires":["shift"]},{"title":"j","requires":["caps","shift"]}],"k":[{"title":"k","requires":[]},{"title":"K","requires":["caps"]},{"title":"K","requires":["shift"]},{"title":"k","requires":["caps","shift"]}],"l":[{"title":"l","requires":[]},{"title":"L","requires":["caps"]},{"title":"L","requires":["shift"]},{"title":"l","requires":["caps","shift"]}],"z":[{"title":"z","requires":[]},{"title":"Z","requires":["caps"]},{"title":"Z","requires":["shift"]},{"title":"z","requires":["caps","shift"]}],"x":[{"title":"x","requires":[]},{"title":"X","requires":["caps"]},{"title":"X","requires":["shift"]},{"title":"x","requires":["caps","shift"]}],"c":[{"title":"c","requires":[]},{"title":"C","requires":["caps"]},{"title":"C","requires":["shift"]},{"title":"c","requires":["caps","shift"]}],"v":[{"title":"v","requires":[]},{"title":"V","requires":["caps"]},{"title":"V","requires":["shift"]},{"title":"v","requires":["caps","shift"]}],"b":[{"title":"b","requires":[]},{"title":"B","requires":["caps"]},{"title":"B","requires":["shift"]},{"title":"b","requires":["caps","shift"]}],"n":[{"title":"n","requires":[]},{"title":"N","requires":["caps"]},{"title":"N","requires":["shift"]},{"title":"n","requires":["caps","shift"]}],"m":[{"title":"m","requires":[]},{"title":"M","requires":["caps"]},{"title":"M","requires":["shift"]},{"title":"m","requires":["caps","shift"]}]},"layout":[["Esc",0.7,"F1","F2","F3","F4",0.7,"F5","F6","F7","F8",0.7,"F9","F10","F11","F12"],[0.1],{"main":{"alpha":[["`","1","2","3","4","5","6","7","8","9","0","-","=","Back"],["Tab","q","w","e","r","t","y","u","i","o","p","[","]","\"],["Caps","a","s","d","f","g","h","j","k","l",";","'","Enter"],["LShift","z","x","c","v","b","n","m",",",".","/","RShift"],["LCtrl","Super","LAlt","Space","RAlt","Menu","RCtrl"]],"movement":[["Ins","Home","PgUp"],["Del","End","PgDn"],[1],["Up"],["Left","Down","Right"]]}}],"keyWidths":{"Back":2,"Tab":1.5,"\":1.5,"Caps":1.85,"Enter":2.25,"LShift":2.1,"RShift":3.1,"LCtrl":1.6,"Super":1.6,"LAlt":1.6,"Space":6.1,"RAlt":1.6,"Menu":1.6,"RCtrl":1.6,"Ins":1.6,"Home":1.6,"PgUp":1.6,"Del":1.6,"End":1.6,"PgDn":1.6}};
        
        
        //虚拟键盘
        var onScreenKeyboard = new Guacamole.OnScreenKeyboard(a);
        document.getElementById('osk').appendChild(onScreenKeyboard.getElement());
        onScreenKeyboard.onkeydown = function(keysym) {
            client.sendKeyEvent(1, keysym);
        };
        onScreenKeyboard.onkeyup = function(keysym) {
            // Do something ...
            client.sendKeyEvent(0, keysym);
        };
    

    给键盘一个容器

    <div class="osk" id="osk">
    </div>
    

    键盘的css样式

    .osk {
        position: relative;
    }
    
    .guac-keyboard {
        display: inline-block;
         100%;
        
        margin: 0;
        padding: 0;
        cursor: default;
    
        text-align: left;
        vertical-align: middle;
    }
    
    .guac-keyboard,
    .guac-keyboard * {
        overflow: hidden;
        white-space: nowrap;
    }
    
    .guac-keyboard .guac-keyboard-key-container {
        display: inline-block;
        margin: 0.05em;
        position: relative;
    }
    
    .guac-keyboard .guac-keyboard-key {
    
        position: absolute;
        left:   0;
        right:  0;
        top:    0;
        bottom: 0;
    
        background: #444;
    
        border: 0.125em solid #666;
        -moz-border-radius:    0.25em;
        -webkit-border-radius: 0.25em;
        -khtml-border-radius:  0.25em;
        border-radius:         0.25em;
    
        color: white;
        font-size: 40%;
        font-weight: lighter;
        text-align: center;
        white-space: pre;
    
        text-shadow:  1px  1px 0 rgba(0, 0, 0, 0.25),
                      1px -1px 0 rgba(0, 0, 0, 0.25),
                     -1px  1px 0 rgba(0, 0, 0, 0.25),
                     -1px -1px 0 rgba(0, 0, 0, 0.25);
    
    }
    
    .guac-keyboard .guac-keyboard-key:hover {
        cursor: pointer;
    }
    
    .guac-keyboard .guac-keyboard-key.highlight {
        background: #666;
        border-color: #666;
    }
    
    /* Align some keys to the left */
    .guac-keyboard .guac-keyboard-key-caps,
    .guac-keyboard .guac-keyboard-key-enter,
    .guac-keyboard .guac-keyboard-key-tab,
    .guac-keyboard .guac-keyboard-key-lalt,
    .guac-keyboard .guac-keyboard-key-ralt,
    .guac-keyboard .guac-keyboard-key-alt-gr,
    .guac-keyboard .guac-keyboard-key-lctrl,
    .guac-keyboard .guac-keyboard-key-rctrl,
    .guac-keyboard .guac-keyboard-key-lshift,
    .guac-keyboard .guac-keyboard-key-rshift {
        text-align: left;
        padding-left: 0.75em;
    }
    
    /* Active shift */
    .guac-keyboard.guac-keyboard-modifier-shift .guac-keyboard-key-rshift,
    .guac-keyboard.guac-keyboard-modifier-shift .guac-keyboard-key-lshift,
    
    /* Active ctrl */
    .guac-keyboard.guac-keyboard-modifier-control .guac-keyboard-key-rctrl,
    .guac-keyboard.guac-keyboard-modifier-control .guac-keyboard-key-lctrl,
    
    /* Active alt */
    .guac-keyboard.guac-keyboard-modifier-alt .guac-keyboard-key-ralt,
    .guac-keyboard.guac-keyboard-modifier-alt .guac-keyboard-key-lalt,
    
    /* Active alt-gr */
    .guac-keyboard.guac-keyboard-modifier-alt-gr .guac-keyboard-key-alt-gr,
    
    /* Active caps */
    .guac-keyboard.guac-keyboard-modifier-caps .guac-keyboard-key-caps,
    
    /* Active super */
    .guac-keyboard.guac-keyboard-modifier-super .guac-keyboard-key-super {
        background: #882;
        border-color: #DD4;
    }
    
    .guac-keyboard .guac-keyboard-key.guac-keyboard-pressed {
        background: #822;
        border-color: #D44;
    }
    
    .guac-keyboard .guac-keyboard-group {
        line-height: 0;
    }
    
    .guac-keyboard .guac-keyboard-group.guac-keyboard-alpha,
    .guac-keyboard .guac-keyboard-group.guac-keyboard-movement {
        display: inline-block;
        text-align: center;
        vertical-align: top;
    }
    
    .guac-keyboard .guac-keyboard-group.guac-keyboard-main {
    
        /* IE10 */
        display: -ms-flexbox;
        -ms-flex-align: stretch;
        -ms-flex-direction: row;
    
        /* Ancient Mozilla */
        display: -moz-box;
        -moz-box-align: stretch;
        -moz-box-orient: horizontal;
        
        /* Ancient WebKit */
        display: -webkit-box;
        -webkit-box-align: stretch;
        -webkit-box-orient: horizontal;
    
        /* Old WebKit */
        display: -webkit-flex;
        -webkit-align-items: stretch;
        -webkit-flex-direction: row;
    
        /* W3C */
        display: flex;
        align-items: stretch;
        flex-direction: row;
    
    }
    
    .guac-keyboard .guac-keyboard-group.guac-keyboard-movement {
        -ms-flex: 1 1 auto;
        -moz-box-flex: 1;
        -webkit-box-flex: 1;
        -webkit-flex: 1 1 auto;
        flex: 1 1 auto;
    }
    
    .guac-keyboard .guac-keyboard-gap {
        display: inline-block;
    }
    
    /* Hide keycaps requiring modifiers which are NOT currently active. */
    .guac-keyboard:not(.guac-keyboard-modifier-caps)
    .guac-keyboard-cap.guac-keyboard-requires-caps,
    
    .guac-keyboard:not(.guac-keyboard-modifier-shift)
    .guac-keyboard-cap.guac-keyboard-requires-shift,
    
    .guac-keyboard:not(.guac-keyboard-modifier-alt-gr)
    .guac-keyboard-cap.guac-keyboard-requires-alt-gr,
    
    /* Hide keycaps NOT requiring modifiers which ARE currently active, where that
       modifier is used to determine which cap is displayed for the current key. */
    .guac-keyboard.guac-keyboard-modifier-shift
    .guac-keyboard-key.guac-keyboard-uses-shift
    .guac-keyboard-cap:not(.guac-keyboard-requires-shift),
    
    .guac-keyboard.guac-keyboard-modifier-caps
    .guac-keyboard-key.guac-keyboard-uses-caps
    .guac-keyboard-cap:not(.guac-keyboard-requires-caps),
    
    .guac-keyboard.guac-keyboard-modifier-alt-gr
    .guac-keyboard-key.guac-keyboard-uses-alt-gr
    .guac-keyboard-cap:not(.guac-keyboard-requires-alt-gr) {
    
        display: none;
        
    }
    
    /* Fade out keys which do not use AltGr if AltGr is active */
    .guac-keyboard.guac-keyboard-modifier-alt-gr
    .guac-keyboard-key:not(.guac-keyboard-uses-alt-gr):not(.guac-keyboard-key-alt-gr) {
        opacity: 0.5;
    }
    
    
  • 相关阅读:
    受得了多大的委屈,才做得了多大的事
    黑客常用 Linux 入侵常用命令
    8年软件测试工程师感悟——写给还在迷茫中的朋友
    买or不买?如何测试博彩公司赔率是否合理?
    函数三
    函数二
    函数
    字符编码与文件的操作
    三、元组,字典、集合
    3.20学习内容,字符串与列表
  • 原文地址:https://www.cnblogs.com/redirect/p/10066726.html
Copyright © 2011-2022 走看看