日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
功能強(qiáng)大的JS虛擬鍵盤

最近做項(xiàng)目,我負(fù)責(zé)做網(wǎng)頁前端,客戶需要利用觸摸屏進(jìn)行操作,不外接鼠標(biāo)鍵盤,但要求能錄入文字,包括數(shù)字,英文,中文。思考了一下,決定用JS實(shí)現(xiàn)虛擬鍵盤。

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),常寧企業(yè)網(wǎng)站建設(shè),常寧品牌網(wǎng)站建設(shè),網(wǎng)站定制,常寧網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,常寧網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

首先上網(wǎng)搜索了一下JS虛擬鍵盤,在經(jīng)過仔細(xì)篩選后,相中了VirtualKeyboard,一款功能強(qiáng)大的JS虛擬鍵盤插件。

先簡(jiǎn)單介紹一下VirtualKeyboard,它內(nèi)置了100多種鍵盤布局和200多種輸入法,9套可選皮膚方案,而且支持自建輸入法,功能相當(dāng)強(qiáng)大。

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

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

集成到項(xiàng)目中去,說干就干!

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

項(xiàng)目頁面中引用JS文件:

 
 
 
 
  1.  

解釋一下:vk_layout=CN%20Chinese%20Simpl.%20Pinyin 表示默認(rèn)輸入法設(shè)置為簡(jiǎn)體中文,vk_skin=flat_gray 表示默認(rèn)皮膚選用flat_gray。這兩個(gè)可以根據(jù)個(gè)人需要進(jìn)行設(shè)置。

調(diào)用/隱藏虛擬鍵盤的函數(shù):

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

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

下面是個(gè)簡(jiǎn)單的例子:

 
 
 
 
  1.  
  2.      
  3.        
  4.      
  5.      
  6.          
  7.         
 
  •      
  •  
  • 效果:

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

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

    于是,我有了初步想法,清空下拉列表,手動(dòng)構(gòu)建一個(gè)只有中文和英文選項(xiàng)的列表。要清空下拉列表,首先要知道它的ID,這種層一般都是動(dòng)態(tài)創(chuàng)建的,于是找到Jsvk\jscripts\virtualkeyboard.js,打開一看,不出所料,代碼是壓縮過以后的,能直接讀懂的都是神人。于是要先對(duì)它進(jìn)行解壓。打開http://jsbeautifier.org/,將JS文件中的代碼復(fù)制到輸入框中,點(diǎn)擊一下按鈕,解壓完成。ctrl+a,ctrl+c復(fù)制到新的JS文件中,OK,可以閱讀了。搜索”

     
     
     
     
    1. "" + "

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

    有了ID,就可以修改了,因?yàn)槭莿?dòng)態(tài)創(chuàng)建的,只有當(dāng)創(chuàng)建完成以后才可以取到它的ID,于是我把代碼寫到了虛擬鍵盤加載之后。

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

     
     
     
     
    1. function test(){  
    2. $("#kb_langselector").empty().append("英文中文").change(function (){   
    3. VirtualKeyboard.switchLayout(this.value);return false;  
    4. });  

    測(cè)試一下發(fā)現(xiàn)了問題,載入停在了10%,頁面提示JS錯(cuò)誤。

    通過錯(cuò)誤描述大概猜到是我構(gòu)建的option有問題,但具體問題出在哪我?guī)捉?jīng)跟蹤調(diào)試也沒找到,如果哪位大俠找到錯(cuò)誤還望不吝賜教!

    遇到錯(cuò)誤久攻不下,轉(zhuǎn)變思路吧!

    初步設(shè)想失敗了,于是我轉(zhuǎn)變思路,既然我構(gòu)建的有問題,那好,我不構(gòu)建了,你自己構(gòu)建,但多余的我不需要。

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

    這還不是我想要的!

    中英文切換實(shí)現(xiàn)了,但操作還不夠便捷,我需要的是一鍵切換,為什么不在鍵盤中增加一個(gè)切換鍵呢?

    首先找到皮膚文件,\Jsvk\jscripts\css\flat_gray\button_set.png,我要自己動(dòng)手加個(gè)按鍵!

    原圖:

    修改后:

    只改圖片肯定不夠,按鈕定位在樣式表里,繼續(xù)修改樣式表!在樣式表\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'后面加上逗號(hào)。修改后:

     
     
     
     
    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.     }; 

    繼續(xù)找到按鈕點(diǎn)擊響應(yīng)代碼:

     
     
     
     
    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多,精簡(jiǎn)!精簡(jiǎn)過程就不寫啦,精簡(jiǎn)完成后:

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

    http://dl.vmall.com/c06xvbxyjx


    標(biāo)題名稱:功能強(qiáng)大的JS虛擬鍵盤
    文章位置:http://www.dlmjj.cn/article/coocesd.html