精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

功能強大的JS虛擬鍵盤

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

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

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

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

先附上下載地址,我傳到網盤里了,目前的最新版本3.71:http://dl.vmall.com/c0os8yayzc

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

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

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

項目頁面中引用JS文件:

  1. <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。這兩個可以根據個人需要進行設置。

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

  1. VirtualKeyboard.toggle("txt_Search""softkey"); 

txt_Search是文本框的ID,softkey是虛擬鍵盤顯示位置元素的ID。

下面是個簡單的例子:

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

效果:

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

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

于是,我有了初步想法,清空下拉列表,手動構建一個只有中文和英文選項的列表。要清空下拉列表,首先要知道它的ID,這種層一般都是動態創建的,于是找到Jsvk\jscripts\virtualkeyboard.js,打開一看,不出所料,代碼是壓縮過以后的,能直接讀懂的都是神人。于是要先對它進行解壓。打開http://jsbeautifier.org/,將JS文件中的代碼復制到輸入框中,點擊一下按鈕,解壓完成。ctrl+a,ctrl+c復制到新的JS文件中,OK,可以閱讀了。搜索”<select“關鍵字,一下子就找到了,代碼如下:

  1. "<select id=\"kb_langselector\"></select>" + "<select id=\"kb_mappingselector\"></select>" 

kb_mappingselector是鍵盤布局選擇框的ID,kb_langselector是輸入法選擇框的ID,kb_langselector就是我們要的ID。

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

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

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

測試一下發現了問題,載入停在了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最后加入下面的代碼。

  1. #kbDesk div#kb_binput_method {  
  2.     float: right;  
  3.     width: 102px;  
  4. }  
  5. #kbDesk div#kb_binput_method a {  
  6.         background-position: -453px 0px;  
  7. }  
  8. #kbDesk div#kb_binput_method.kbButtonHover a {  
  9.         background-position: -453px -38px;  
  10. }  
  11. #kbDesk div#kb_binput_method.kbButtonDown a {  
  12.         background-position: -453px -76px;  

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

  1. var C = {  
  2. 'backspace',  
  3. 'tab',  
  4. 'enter',  
  5. 'caps',  
  6. 'shift_left',  
  7. 'shift_right',  
  8. 'del',  
  9. 'ctrl_left',  
  10. 'alt_left',  
  11. 'space',  
  12. 'alt_right',  
  13. 'ctrl_right' 
  14.     }; 

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

  1. var C = {  
  2. 'backspace',  
  3. 'tab',  
  4. 'enter',  
  5. 'caps',  
  6. 'shift_left',  
  7. 'shift_right',  
  8. 'del',  
  9. 'ctrl_left',  
  10. 'alt_left',  
  11. 'space',  
  12. 'alt_right',  
  13. 'ctrl_right',  
  14. 'input_method' 
  15.     }; 

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

  1. var d = function (i) {  
  2.         var e = DOM.getParent(i.srcElement || i.target, 'a');  
  3.         if (!e || e.parentNode.id.indexOf(Q) < 0) return;  
  4.         e = e.parentNode;  
  5.         var iI = X;  
  6.         var il = e.id.substring(Q.length);  
  7.         switch (il) {  
  8.             case "caps":  
  9.                 iI = iI ^ s;  
  10.                 break;  
  11.             case "shift_left":  
  12.             case "shift_right":  
  13.                 if (i.shiftKey) break;  
  14.                 iI = iI ^ Z;  
  15.                 break;  
  16.             case "alt_left":  
  17.             case "alt_right":  
  18.             case "ctrl_left":  
  19.             case "ctrl_right":  
  20.                 iI = iI ^ (i.altKey << 1 ^ w) ^ (i.ctrlKey << 2 ^ W);  
  21.                 break;  
  22.             default:  
  23.                 if (_) DOM.CSS(e).addClass(y.buttonDown);  
  24.                 break 
  25.         }  
  26.         if (X != iI) {  
  27.             B(iI);  
  28.             b();  
  29.         }  
  30.         i.preventDefault();  
  31.         i.stopPropagation();  
  32.     }; 

修改為:

  1. var d = function (i) {  
  2.         var e = DOM.getParent(i.srcElement || i.target, 'a');  
  3.         if (!e || e.parentNode.id.indexOf(Q) < 0) return;  
  4.         e = e.parentNode;  
  5.         var iI = X;  
  6.         var il = e.id.substring(Q.length);  
  7.         switch (il) {  
  8.             case "caps":  
  9.                 iI = iI ^ s;  
  10.                 break;  
  11.             case "input_method":  
  12.                 if (document.getElementById("kb_langselector").value == 'US US') {  
  13.                     VirtualKeyboard.switchLayout("CN Chinese Simpl. Pinyin");  
  14.  
  15.                 }  
  16.                 else {  
  17.                     VirtualKeyboard.switchLayout("US US");  
  18.  
  19.                 }  
  20.                 break;  
  21.             case "shift_left":  
  22.             case "shift_right":  
  23.                 if (i.shiftKey) break;  
  24.                 iI = iI ^ Z;  
  25.                 break;  
  26.             case "alt_left":  
  27.             case "alt_right":  
  28.             case "ctrl_left":  
  29.             case "ctrl_right":  
  30.                 iI = iI ^ (i.altKey << 1 ^ w) ^ (i.ctrlKey << 2 ^ W);  
  31.                 break;  
  32.             default:  
  33.                 if (_) DOM.CSS(e).addClass(y.buttonDown);  
  34.                 break 
  35.         }  
  36.         if (X != iI) {  
  37.             B(iI);  
  38.             b();  
  39.         }  
  40.         i.preventDefault();  
  41.         i.stopPropagation();  
  42.     }; 

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

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

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

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

http://dl.vmall.com/c06xvbxyjx

原文鏈接:http://www.cnblogs.com/nnzfly/archive/2013/01/22/2871547.html

責任編輯:張偉 來源: 博客園
相關推薦

2010-03-05 09:19:54

Android系統

2009-07-07 08:46:11

微軟Windows 7新功能

2010-02-24 17:58:28

Python 測試框架

2022-10-10 10:14:38

Python繪圖庫

2012-01-10 16:23:12

兄弟傳真機

2011-04-15 09:27:09

Windows PhoWindows phoMango

2009-12-02 13:46:10

PHP模板引擎

2022-03-20 18:12:03

Shotcut開源視頻編輯器

2021-07-09 10:14:05

IP工具命令

2022-06-23 10:17:00

Git技術Linux

2015-11-03 10:40:25

Sysdig命令工具

2024-10-21 13:05:40

2009-12-01 16:44:06

PHP編輯器

2010-03-10 14:42:07

三層交換機

2023-12-19 09:00:03

OCR軟件開源Ocrad

2020-12-15 15:08:17

工具Java線程

2024-05-15 07:48:08

.NET開源圖表庫

2020-12-15 07:54:40

工具Hutoolgithub

2010-02-03 17:01:14

2024-01-15 18:02:09

docker系統文件格式
點贊
收藏

51CTO技術棧公眾號

女性生殖扒开酷刑vk| 91精品一区二区| 欧美做受高潮6| 成人国产激情| 亚洲欧美日韩国产一区二区三区| 国产精品国产三级欧美二区| 国产精品美女久久久久av爽| 欧美亚洲国产一区| 精品99999| 中国黄色片免费看| 久久青青色综合| 欧美国产综合一区二区| 动漫一区二区在线| 亚洲另类在线观看| 影音先锋日韩在线| 亚洲日本成人网| 又黄又色的网站| 日韩精品一级毛片在线播放| 午夜精品影院在线观看| 欧美 另类 交| 国模吧精品人体gogo| 国产凹凸在线观看一区二区| 国产精品美女在线| 国产欧美一区二区三区在线看蜜臂| 久久精品国产99久久| 亚洲精品国产suv| 久久久久久久久久毛片| 亚洲精品国产嫩草在线观看| 亚洲精品精品亚洲| 亚洲国产精品综合| 嫩草在线播放| 菠萝蜜视频在线观看一区| 成人黄色激情网| 亚洲无码精品一区二区三区| 亚洲精品九九| 欧美精品日韩www.p站| av免费播放网站| 少妇精品久久久一区二区三区| 亚洲成人中文字幕| 亚洲av午夜精品一区二区三区| 国外成人福利视频| 欧美专区在线观看一区| 日本在线观看a| 在线免费三级电影网站| 五月天视频一区| 免费毛片网站在线观看| 特级毛片在线| 亚洲综合色噜噜狠狠| 99视频精品全部免费看| 成人在线app| 亚洲欧美色图小说| 中文字幕精品一区日韩| 日本三级视频在线观看| 国产精品乱码一区二区三区软件 | 91在线公开视频| 日韩电影在线免费看| 国产精品久久久久久久久久免费| 手机看片久久久| 久久精品伊人| 国产精品久久久久77777| 久久这里只有精品9| 欧美aa在线视频| 成人黄色大片在线免费观看| 国产哺乳奶水91在线播放| 国产精品一区二区在线观看网站| 亚洲xxx视频| 亚洲高清在线观看视频| www.激情成人| 蜜桃av噜噜一区二区三区| 好男人免费精品视频| 亚洲国产成人在线| 特级黄色录像片| 激情影院在线| 天天影视色香欲综合网老头| 黄色片一级视频| 日韩中文在线播放| 欧美精品高清视频| 野战少妇38p| 自拍偷拍精品| 菠萝蜜影院一区二区免费| 欧美三级小视频| 在线亚洲观看| 国产精品一区二区三区免费视频| 91麻豆成人精品国产免费网站| 国产一区啦啦啦在线观看| 韩国成人动漫在线观看| 东热在线免费视频| 亚洲欧美日韩人成在线播放| 男女激情免费视频| 香蕉成人av| 欧美一区二区黄| 国产成人av一区二区三区不卡| 日韩精品一区二区三区免费观看| 欧美成人免费大片| 香蕉影院在线观看| 国产一区二区三区黄视频| 国产一区二区三区无遮挡| av在线之家电影网站| 亚洲综合色在线| 蜜桃免费在线视频| 亚洲精品午夜| 深夜福利一区二区| 日韩欧美亚洲视频| 久久99精品久久久| 麻豆91av| 久久av色综合| 9191成人精品久久| 精品人妻一区二区三区视频| 综合五月婷婷| 国产精品久久久久久五月尺| 欧美 日韩 中文字幕| 国产精品久久久一本精品| av高清在线免费观看| 亚洲欧美专区| 国产一区二区美女视频| 久久99久久久| 狠狠狠色丁香婷婷综合激情| 欧美亚州在线观看| free性m.freesex欧美| 51精品视频一区二区三区| 黑人巨大精品欧美| 亚洲国产高清一区二区三区| 成人免费直播live| av色图一区| 日韩欧美中文免费| 国产一级黄色录像| 国产精品sm| 91黄色国产视频| 国产黄大片在线观看画质优化| 色狠狠桃花综合| 中文字幕xxx| 99精品久久久| 国产精品99久久久久久久| 国产视频在线播放| 欧美丰满嫩嫩电影| 男人的午夜天堂| 老色鬼精品视频在线观看播放| 欧美日韩高清免费| 天堂√中文最新版在线| 日韩第一页在线| 久久久午夜影院| 91色九色蝌蚪| 无码aⅴ精品一区二区三区浪潮| 久久久免费毛片| 久久久久亚洲精品| 精品人妻无码一区二区色欲产成人 | 精品久久人人做人人爱| 永久免费看片视频教学| 看片的网站亚洲| 亚洲欧美在线网| 欧美成人福利| 亚洲四色影视在线观看| 男人天堂av在线播放| 久久综合99re88久久爱| 久久无码高潮喷水| 国产剧情一区| 国产精品视频免费在线| 日本三级在线视频| 日韩欧美一区在线| 国产精品第56页| 91亚洲永久精品| 国内外免费激情视频| 精品视频亚洲| 91人成网站www| 欧美日韩色网| 日韩av在线一区二区| 亚洲日本韩国在线| 久久久91精品国产一区二区精品| 欧美伦理片在线看| 天天精品视频| 成人片在线免费看| 中文字幕高清在线播放| 亚洲性视频网站| 国产精品伦一区二区三区| 洋洋成人永久网站入口| 国产黄色三级网站| 日韩国产欧美一区二区三区| 中文字幕日韩精品久久| 视频二区欧美| 青青草原成人在线视频| av在线免费一区| 精品欧美一区二区在线观看| 黄色在线免费观看| 亚洲欧美视频在线观看| 久久久午夜精品福利内容| 日韩国产高清在线| 97超碰在线视| 欧美日韩xxxx| 成人自拍网站| 蜜桃视频成人m3u8| 久久99久久久久久久噜噜| 日韩a在线看| 91精品国产高清一区二区三区蜜臀 | 久久久成人免费视频| 国产精品女主播在线观看| 性猛交╳xxx乱大交| 日韩影院精彩在线| 国产卡一卡二在线| 免费久久久久久久久| 成人性教育视频在线观看| 女人高潮被爽到呻吟在线观看| 色偷偷噜噜噜亚洲男人的天堂| 免费看国产片在线观看| 欧美日韩免费高清一区色橹橹| 久久午夜鲁丝片午夜精品| 欧美国产综合一区二区| www.88av| 国产精品18久久久久久久网站| 久久久久久久久久福利| 欧美福利电影在线观看| 亚洲图色在线| 亚洲肉体裸体xxxx137| 91久久精品一区二区别| 久久av影院| 欧美中文字幕视频| 日本性爱视频在线观看| www.xxxx欧美| 国内精品在线视频| 日韩电影免费观看中文字幕| 99产精品成人啪免费网站| 欧美系列亚洲系列| 五月天激情国产综合婷婷婷| 亚洲激情男女视频| 日韩国产第一页| 国产精品视频在线看| 免费观看av网站| 91网站在线观看视频| 影音先锋资源av| 国产精品一区二区在线观看网站| 亚洲图色中文字幕| 免费在线看成人av| 激情综合网俺也去| 老司机午夜精品视频在线观看| 精品人妻少妇一区二区| 欧美另类综合| www.亚洲成人网| 亚洲欧美亚洲| 香蕉精品视频在线| 婷婷激情综合| 正在播放久久| 午夜精品毛片| 久久久成人精品一区二区三区 | 成人97人人超碰人人99| 日本女人黄色片| 国产成人亚洲综合a∨婷婷图片| 中文字幕永久有效| 久久66热re国产| 手机免费av片| 国产综合久久久久久鬼色| 亚洲黄色片免费| 国产精品乡下勾搭老头1| 极品人妻一区二区| 国产91精品免费| 95视频在线观看| 91女神在线视频| b站大片免费直播| 欧美韩国日本综合| 九九热最新地址| 亚洲尤物在线视频观看| 国产成人精品av久久| 红桃av永久久久| 国产成人无码av| 欧美日韩久久不卡| 国产高清第一页| 亚洲成人黄色在线观看| 日韩私人影院| 神马国产精品影院av| 黄色成人影院| 国外成人在线播放| 免费日韩电影| 国产专区精品视频| 国产精品成人自拍| 奇米影视首页 狠狠色丁香婷婷久久综合| 在线日韩网站| 中文字幕一区综合| 在线欧美日韩| 91蝌蚪视频在线观看| 国产在线不卡一区| 性久久久久久久久久久| 国产欧美精品在线观看| 国产女人被狂躁到高潮小说| 婷婷中文字幕一区三区| 亚洲大尺度在线观看| 欧美一区二区三区免费视频 | 日日狠狠久久| 精品久久久久久亚洲| 日韩久久综合| 国产精品久久久久9999爆乳| 日日摸夜夜添夜夜添精品视频 | 日本在线观看网址| 亚洲免费资源在线播放| 99超碰在线观看| 91精品国产综合久久福利| 婷婷亚洲一区二区三区| 久久久精品影院| 免费亚洲电影| 91手机在线播放| 国产成人手机高清在线观看网站| 最新不卡av| 老牛嫩草一区二区三区日本 | 最近中文字幕2019免费| 国产99re66在线视频| 国产精品自拍偷拍| 国产伦精品一区二区三区免费优势 | 国产乱码精品1区2区3区| 亚洲免费观看在线| 国产精品婷婷午夜在线观看| 99精品视频99| 91麻豆精品国产91| 毛片免费在线播放| 欧美极品美女电影一区| 欧洲午夜精品| 欧美视频观看一区| 一区二区亚洲| 男人操女人下面视频| 欧美激情在线免费观看| 日韩av大片在线观看| 精品国产三级a在线观看| 一级日本在线| 国产精品成人观看视频国产奇米| 欧美变态挠脚心| 91.com在线| 国产一区二区剧情av在线| 手机看片日韩av| 中文无字幕一区二区三区 | 污污的网站在线看| 成人精品久久一区二区三区| 欧美视频免费| 精品久久久久久无码国产| 国产成人综合亚洲网站| 欧美另类videoxo高潮| 欧美日韩久久久一区| 9191在线观看| 国产精品久久久久免费a∨| 猛男gaygay欧美视频| 男人天堂999| 99精品一区二区三区| 日本中文字幕网| 亚洲成人黄色在线| 国产传媒在线观看| 久久久福利视频| 国产美女一区| 亚洲av无码一区二区二三区| 粉嫩老牛aⅴ一区二区三区| 男人天堂手机在线观看| 韩国美女主播一区| 欧美巨大xxxx| 国产最新免费视频| 久久一区二区视频| 超碰在线观看91| 中文字幕日韩在线观看| 婷婷激情成人| 久久天天东北熟女毛茸茸| 国产精品一区二区在线看| 免费人成年激情视频在线观看| 日韩精品一区二区三区中文不卡 | 国产一级免费在线观看| 清纯唯美亚洲综合| 国产一区网站| 奇米视频888| 亚洲综合在线视频| 丝袜视频国产在线播放| 国产精国产精品| 999久久久精品国产| 成年人看片网站| 五月天亚洲精品| porn视频在线观看| 亚洲综合一区二区不卡| 一本久道久久综合狠狠爱| 加勒比一区二区| 欧美夫妻性生活| h片在线观看下载| 日韩国产在线一区| 国精品**一区二区三区在线蜜桃 | 99re在线国产| 精品乱码一区内射人妻无码| 亚洲欧美国内爽妇网| 青青草国产一区二区三区| 国产精品无码电影在线观看| 99久久99久久精品免费观看| 中文字幕你懂的| 欧美高清视频免费观看| 亚洲丝袜啪啪| 色播五月激情五月| 亚洲国产毛片aaaaa无费看| 狠狠狠综合7777久夜色撩人| 亚洲在线免费视频| 亚洲综合国产| 永久久久久久久| 亚洲精品在线不卡| 韩国三级成人在线| 国产男女无遮挡| 亚洲精品国产无套在线观| 欧美一区二区少妇| 亚洲精品女av网站| 美女精品在线| 麻豆changesxxx国产| 一本色道久久综合狠狠躁篇的优点| 国产一区二区av在线| 国内外免费激情视频|