亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

打造個性化的功能強大的Jquery虛擬鍵盤(VirtualKeyboard)

2019-11-20 14:03:13
字體:
來源:轉載
供稿:網友

最近做項目,我負責做網頁前端,客戶需要利用觸摸屏進行操作,不外接鼠標鍵盤,但要求能錄入文字,包括數字,英文,中文。思考了一下,決定用JS實現虛擬鍵盤。

首先上網搜索了一下JS虛擬鍵盤,在經過仔細篩選后,相中了VirtualKeyboard,一款功能強大的JS虛擬鍵盤插件。

先簡單介紹一下VirtualKeyboard,它內置了100多種鍵盤布局和200多種輸入法,9套可選皮膚方案,而且支持自建輸入法,功能相當強大。

先附上下載地址,目前的最新版本3.94:http://www.corallosoftware.it/Download/download.html 本教程使用的是3.71就不單獨提供下載了,有需要的朋友可以下載我修改完畢的,在文章的最后

下載下來先查看它的演示文檔,依次打開Jsvk/jscripts/demo_inline.html,看到虛擬鍵盤做的還是蠻漂亮的,而且支持中文拼音輸入,完全符合預期。如下圖所示:

集成到項目中去,說干就干!

  首先將Jsvk/jscripts目錄下的文件復制到項目中去,文本文件和html演示文件可以刪掉。

  項目頁面中引用JS文件:

復制代碼 代碼如下:

<script type="text/javascript" src="jscripts/vk_loader.js?vk_layout=CN%20Chinese%20Simpl.%20Pinyin&vk_skin=flat_gray" ></script>

解釋一下:vk_layout=CN%20Chinese%20Simpl.%20Pinyin 表示默認輸入法設置為簡體中文,

              vk_skin=flat_gray 表示默認皮膚選用flat_gray。這兩個可以根據個人需要進行設置。

  調用/隱藏虛擬鍵盤的函數:

VirtualKeyboard.toggle("txt_Search", "softkey");
  txt_Search是文本框的ID,softkey是虛擬鍵盤顯示位置元素的ID。

  下面是個簡單的例子:

復制代碼 代碼如下:

<html>
    <head>
      <script type="text/javascript" src="vk_loader.js?vk_layout=CN%20Chinese%20Simpl.%20Pinyin&vk_skin=flat_gray" ></script>
    </head>
    <body>
        <input type="text" id="txt_Search" onfocus="VirtualKeyboard.toggle('txt_Search', 'softkey')" onblur="VirtualKeyboard.toggle('txt_Search','softkey');" />
        <div id="softkey"></div>
    </body>
</html>       

  效果:

一步一步定制自己需要的功能

  基本功能實現了,接下來就是中英文切換。先點擊CapsLock切換到大寫試試,結果失望了,中文狀態下切換到大寫輸入的依然是中文。只能點擊右下角的輸入法選擇菜單,找到US,切換到英文輸入法。這可不行,每次都要在上百個選項里來回切換,用戶體驗得有多差??!

  于是,我有了初步想法,清空下拉列表,手動構建一個只有中文和英文選項的列表。要清空下拉列表,首先要知道它的ID,這種層一般都是動態創建的,于是找到Jsvk/jscripts/virtualkeyboard.js,打開一看,不出所料,代碼是壓縮過以后的,能直接讀懂的都是神人。于是要先對它進行解壓。打開  kb_mappingselector是鍵盤布局選擇框的ID,kb_langselector是輸入法選擇框的ID,kb_langselector就是我們要的ID。

  有了ID,就可以修改了,因為是動態創建的,只有當創建完成以后才可以取到它的ID,于是我把代碼寫到了虛擬鍵盤加載之后。

  以下代碼用到了JQuery框架,需要先引用JQuery方可正常使用。

復制代碼 代碼如下:

function test(){
$("#kb_langselector").empty().append("<option value='US US'>英文</option><option value='CN Chinese Simpl. Pinyin'>中文</option>").change(function (){
VirtualKeyboard.switchLayout(this.value);return false;
});
}

  測試一下發現了問題,載入停在了10%,頁面提示JS錯誤。

  通過錯誤描述大概猜到是我構建的option有問題,但具體問題出在哪我幾經跟蹤調試也沒找到,如果哪位大俠找到錯誤還望不吝賜教!

遇到錯誤久攻不下,轉變思路吧!

  初步設想失敗了,于是我轉變思路,既然我構建的有問題,那好,我不構建了,你自己構建,但多余的我不需要。

  按照這個思路,我重新研究加載代碼,發現輸入法加載的JS是在Jsvk/jscripts/layouts/layouts.js中定義的。于是果斷刪除多余的選項,只留下了Chinese Simpl. Pinyin和US兩個選項。改完后的效果圖如下,只有中文和英文兩個選項,清爽多了。

 

這還不是我想要的!

  中英文切換實現了,但操作還不夠便捷,我需要的是一鍵切換,為什么不在鍵盤中增加一個切換鍵呢?

  首先找到皮膚文件,/Jsvk/jscripts/css/flat_gray/button_set.png,我要自己動手加個按鍵!

原圖:

 

修改后:

  只改圖片肯定不夠,按鈕定位在樣式表里,繼續修改樣式表!在樣式表/Jsvk/jscripts/css/flat_gray/keyboard.css最后加入下面的代碼。

復制代碼 代碼如下:

#kbDesk div#kb_binput_method {
    float: right;
    width: 102px;
}
#kbDesk div#kb_binput_method a {
        background-position: -453px 0px;
}
#kbDesk div#kb_binput_method.kbButtonHover a {
        background-position: -453px -38px;
}
#kbDesk div#kb_binput_method.kbButtonDown a {
        background-position: -453px -76px;
}

  接下來要在JS文件中給按鈕定義事件。打開virtualkeyboard.js,找到

復制代碼 代碼如下:

var C = {
        14: 'backspace',
        15: 'tab',
        28: 'enter',
        29: 'caps',
        41: 'shift_left',
        52: 'shift_right',
        53: 'del',
        54: 'ctrl_left',
        55: 'alt_left',
        56: 'space',
        57: 'alt_right',
        58: 'ctrl_right'
    };

  在下面加上59: 'input_method',記得在'ctrl_right'后面加上逗號。修改后:

復制代碼 代碼如下:

var C = {
        14: 'backspace',
        15: 'tab',
        28: 'enter',
        29: 'caps',
        41: 'shift_left',
        52: 'shift_right',
        53: 'del',
        54: 'ctrl_left',
        55: 'alt_left',
        56: 'space',
        57: 'alt_right',
        58: 'ctrl_right',
        59: 'input_method'
    };

  繼續找到按鈕點擊響應代碼:

復制代碼 代碼如下:

var d = function (i) {
        var e = DOM.getParent(i.srcElement || i.target, 'a');
        if (!e || e.parentNode.id.indexOf(Q) < 0) return;
        e = e.parentNode;
        var iI = X;
        var il = e.id.substring(Q.length);
        switch (il) {
            case "caps":
                iI = iI ^ s;
                break;
            case "shift_left":
            case "shift_right":
                if (i.shiftKey) break;
                iI = iI ^ Z;
                break;
            case "alt_left":
            case "alt_right":
            case "ctrl_left":
            case "ctrl_right":
                iI = iI ^ (i.altKey << 1 ^ w) ^ (i.ctrlKey << 2 ^ W);
                break;
            default:
                if (_) DOM.CSS(e).addClass(y.buttonDown);
                break
        }
        if (X != iI) {
            B(iI);
            b();
        }
        i.preventDefault();
        i.stopPropagation();
    };

  修改為:

復制代碼 代碼如下:

var d = function (i) {
        var e = DOM.getParent(i.srcElement || i.target, 'a');
        if (!e || e.parentNode.id.indexOf(Q) < 0) return;
        e = e.parentNode;
        var iI = X;
        var il = e.id.substring(Q.length);
        switch (il) {
            case "caps":
                iI = iI ^ s;
                break;
            case "input_method":
                if (document.getElementById("kb_langselector").value == 'US US') {
                    VirtualKeyboard.switchLayout("CN Chinese Simpl. Pinyin");

                }
                else {
                    VirtualKeyboard.switchLayout("US US");

                }
                break;
            case "shift_left":
            case "shift_right":
                if (i.shiftKey) break;
                iI = iI ^ Z;
                break;
            case "alt_left":
            case "alt_right":
            case "ctrl_left":
            case "ctrl_right":
                iI = iI ^ (i.altKey << 1 ^ w) ^ (i.ctrlKey << 2 ^ W);
                break;
            default:
                if (_) DOM.CSS(e).addClass(y.buttonDown);
                break
        }
        if (X != iI) {
            B(iI);
            b();
        }
        i.preventDefault();
        i.stopPropagation();
    };


  既然有了按鈕,就不需要顯示下面的下拉框了,所以,給它隱藏掉!

  OK,大功告成!看下效果圖

  外觀和功能搞定了,但一看它的文件夾,足足7M多,精簡!精簡過程就不寫啦,精簡完成后:

  寫了這么多,謝謝你能把它看完,最后放上全部修改精簡完成之后的源碼!

//www.49028c.com/jiaoben/228716.html

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品日韩av| 久久久成人精品| 国产一区二区在线播放| 俺去亚洲欧洲欧美日韩| 久久成年人免费电影| 在线观看精品自拍私拍| 亚洲视频第一页| 欧美日韩成人在线视频| 欧美精品videos另类日本| 视频在线观看一区二区| 国产精品久久久久久久久影视| 欧美激情网友自拍| 亚洲免费人成在线视频观看| 在线成人激情视频| 亚洲视频精品在线| 91啪国产在线| 国产一区二区三区视频| 国产精品视频男人的天堂| 久久久久久久国产| 8x海外华人永久免费日韩内陆视频| 国产成人高清激情视频在线观看| 久久婷婷国产麻豆91天堂| 久久国产精品久久久久久久久久| 欧美日韩一二三四五区| 欧美另类在线播放| 国产亚洲精品美女| 欧洲成人性视频| 中文字幕最新精品| 国产精品自产拍在线观| 最近2019免费中文字幕视频三| 日韩中文字幕久久| 日韩精品中文在线观看| 粗暴蹂躏中文一区二区三区| 欧美激情2020午夜免费观看| 欧美高清视频免费观看| 欧美孕妇毛茸茸xxxx| 日本一区二三区好的精华液| 日韩av电影国产| 精品国内亚洲在观看18黄| 国产精品18久久久久久麻辣| 日韩精品久久久久久福利| 69影院欧美专区视频| 亚洲第一精品电影| 伊人久久久久久久久久久久久| 高清欧美电影在线| 日韩高清电影好看的电视剧电影| 日韩av免费网站| 在线丨暗呦小u女国产精品| 黑人精品xxx一区一二区| 最近2019年好看中文字幕视频| 国产日韩欧美在线播放| 国外色69视频在线观看| 精品欧美一区二区三区| 亚洲国产小视频| 欧美韩国理论所午夜片917电影| 欧美性猛交99久久久久99按摩| 亚洲综合一区二区不卡| 亚洲一区二区自拍| 狠狠色香婷婷久久亚洲精品| 日韩一区二区av| 在线不卡国产精品| 亚洲电影中文字幕| 大胆人体色综合| 日韩在线精品视频| 国产在线观看精品一区二区三区| 久久久国产一区二区三区| 国产日产欧美a一级在线| 日本精品久久电影| 色综合亚洲精品激情狠狠| 97超级碰碰人国产在线观看| 亚洲第一视频网站| 色偷偷噜噜噜亚洲男人的天堂| 亚洲精品aⅴ中文字幕乱码| 欧美成人免费在线观看| 亚洲激情成人网| 国产精品高潮呻吟视频| 亚洲最大福利视频网站| 色婷婷av一区二区三区久久| 欧美视频在线观看 亚洲欧| 永久免费看mv网站入口亚洲| 狠狠色狠狠色综合日日小说| 日本亚洲欧洲色| 成人精品视频久久久久| 国产z一区二区三区| 日韩av网址在线观看| 国产精品18久久久久久首页狼| 欧美日韩在线视频首页| 欧美成人精品在线播放| 高清欧美性猛交xxxx黑人猛交| 久久久久久综合网天天| 91爱爱小视频k| 日本精品va在线观看| 久久五月天综合| 视频在线观看一区二区| 欧美久久精品一级黑人c片| 国产一区二区三区网站| 一区二区三区亚洲| 欧美午夜丰满在线18影院| 日本91av在线播放| 亚洲aaaaaa| 欧美日韩精品在线播放| 国产日韩欧美视频| 亚洲第一精品自拍| 久久天天躁日日躁| 日本91av在线播放| 欧洲亚洲妇女av| 一区二区三区黄色| 欧美综合国产精品久久丁香| 国产日韩在线一区| 亚洲成年网站在线观看| 日韩中文视频免费在线观看| 5566日本婷婷色中文字幕97| 91精品国产网站| 国产精品视频大全| 国产精品久久久久高潮| 欧美激情videos| 91精品国产91久久久久久吃药| 91在线精品视频| 久久精品夜夜夜夜夜久久| 国产成人精品一区| 成人精品视频在线| 岛国av一区二区在线在线观看| 麻豆精品精华液| 欧洲永久精品大片ww免费漫画| 成人黄色在线播放| 亚洲自拍在线观看| 亚洲黄一区二区| 中文字幕亚洲一区二区三区五十路| 成人免费高清完整版在线观看| 日韩欧美在线国产| 欧美国产中文字幕| 亚洲精品mp4| 日韩电影在线观看永久视频免费网站| 久久久久久成人| 亚洲国产精品大全| 亚洲欧美日韩高清| 国产精品99久久久久久人| 欧美精品在线看| 一本色道久久88综合亚洲精品ⅰ| 午夜精品久久久久久久白皮肤| 国产suv精品一区二区| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲直播在线一区| 亚洲free性xxxx护士白浆| 影音先锋欧美在线资源| 欧美最猛性xxxxx(亚洲精品)| 欧美在线性视频| 久久久精品一区二区| 午夜精品久久久久久99热| 国产精品第一页在线| 3344国产精品免费看| 一区二区三区www| 欧美性猛交xxxx久久久| 日韩大片在线观看视频| 九九热r在线视频精品| 久久久国产一区二区三区| 国产精品自拍网| 日韩精品中文字幕有码专区| 国产日韩欧美中文| 亚洲午夜性刺激影院| 欧美又大又硬又粗bbbbb| 91精品国产综合久久男男| 日韩福利伦理影院免费| 欧美性受xxxx白人性爽|