利用JavaScript實(shí)現(xiàn)創(chuàng)建虛擬鍵盤的示例代碼
前言
項(xiàng)目基本結(jié)構(gòu)
目錄結(jié)構(gòu)如下:
這是一個(gè)簡(jiǎn)單的 JavaScript 教程,教你如何創(chuàng)建JavaScript 虛擬鍵盤。虛擬鍵盤是一種屏幕輸入法,如果你使用的是 Windows 操作系統(tǒng),我相信你應(yīng)該也使用過 Windows 中的默認(rèn)虛擬鍵盤。
首先,我創(chuàng)建了一個(gè)可以看到輸入字符的結(jié)果框,也就是我們可以在其中看到所有信息的顯示器。此虛擬鍵盤上還有另一個(gè)包含許多按鈕的框。包括有許多字母按鈕、一個(gè)空格和一個(gè)退格。
這個(gè)現(xiàn)代 Javascript 虛擬鍵盤非常容易創(chuàng)建。但是為此,你需要對(duì) HTML、CSS 和 javascript 有一個(gè)基本的了解。
JavaScript 虛擬鍵盤的顯示
現(xiàn)在我已經(jīng)創(chuàng)建了顯示,這個(gè) javascript 數(shù)字小鍵盤的顯示寬度是 500px。由于這里使用了Neumorphism 設(shè)計(jì),因此在顯示器周圍使用了陰影。
HTML
<p id="ip"></p>
CSS
*{ padding: 0; margin: 0; box-sizing: border-box; } body{ background-color: rgb(26, 26, 26); font-family: sans-serif; }
#ip{ width: 500px; min-height: 30px; box-shadow: -3px -3px 5px rgb(63, 63, 63) , 3px 3px 5px black; text-align: center; color: white; letter-spacing: 1px; position: absolute; top: 165px; left: 50%; margin: -50px auto; transform:translateX(-50%) ; font-size: 18px; text-transform: capitalize; }
顯示效果
虛擬鍵盤的按鈕
現(xiàn)在必須將所有按鈕添加到虛擬鍵盤。在這里,我根據(jù)我的要求添加了一些按鈕。
<div class="keybord"> <div class="row row1"> <button>Q</button> <button>W</button> <button>E</button> <button>R</button> <button>T</button> <button>Y</button> <button>U</button> <button>I</button> <button>O</button> <button>P</button> </div> <div class="row row2"> <button>A</button> <button>S</button> <button>D</button> <button>F</button> <button>G</button> <button>H</button> <button>J</button> <button>K</button> <button>L</button> </div> <div class="row row3"> <button>Z</button> <button>X</button> <button>C</button> <button>V</button> <button>B</button> <button>N</button> <button>M</button> </div> <div class="row row4"> <div class="space" id="space">space</div> <div class="backspace" id="backspace">Backspace</div> </div> </div>
顯示效果
CSS的鍵盤按鈕設(shè)計(jì)
首先,按鈕的背景被賦予一個(gè)盒子的形狀寬度:680 像素,每個(gè)按鈕的寬度:50px,高度:50 像素.
CSS
.keybord{ box-shadow: -3px -3px 5px rgb(63, 63, 63) , 3px 3px 5px black; width: 680px; margin:200px auto 50px; display: flex; flex-direction: column; align-items: center; padding:20px 20px; border-radius: 10px; } .row{ margin:5px ; user-select: none; } button{ width: 50px; height: 50px; font-weight: bold; margin: 0 4px; border: none; background-color: transparent; color:white; box-shadow: -2px -2px 4px rgb(63, 63, 63) , 2px 2px 4px black; border-radius: 5px; cursor: pointer; }
顯示效果
該 javascript 移動(dòng)鍵盤 中尚未設(shè)計(jì)空格和退格按鈕。我使用以下 CSS 設(shè)計(jì)了這些按鈕。
.row4 , .backspace , .space{ display: flex; align-items: center; justify-content: center; } .keybord .backspace , .space{ color: white; font-weight: bold; cursor: pointer; /* user-select: none; */ } .backspace , .space{ border-radius: 5px; box-shadow: -2px -2px 4px rgb(63, 63, 63) , 2px 2px 4px black; } .keybord .space{ width: 300px; height: 50px; } .keybord .backspace { width: 100px; height: 50px; margin-left: 15px; }
下面的 CSS 已將 onclick 效果添加到按鈕中。也就是說,當(dāng)您單擊按鈕時(shí),按鈕會(huì)發(fā)生變化。
CSS
.keybord .active{ box-shadow:inset -2px -2px 4px rgb(63, 63, 63) , inset 2px 2px 4px black; color: yellow; }
使用 JavaScript 激活虛擬鍵盤
創(chuàng)建了上面的屏幕虛擬鍵盤的設(shè)計(jì),但是它還沒有生效。首先我們確定一些 HTML 元素的常量。正如我們所知,我們不能直接在 JavaScript 中使用任何 HTML 元素。
在實(shí)現(xiàn)這個(gè)虛擬鍵盤 HTML 和 CSS 之前,讓我來給大家一些信息。我們將以三種方式激活這些按鈕。這意味著這個(gè)虛擬鍵盤可以通過鼠標(biāo)、外接鍵盤和觸摸三種方式進(jìn)行控制。
let button = document.getElementsByTagName('button') let p = document.getElementById('ip'); let space =document.getElementById('space') let Backspace = document.getElementById('backspace')
我已安排使用下面的 JavaScript 使用外部鍵盤激活此虛擬鍵盤。這使您可以使用計(jì)算機(jī)的鍵盤來控制這個(gè) javascript 虛擬鍵盤。
document.body.addEventListener('keydown' , function(index){ for (let i=0 ; i <button.length ; i++) { //UpperCase() 方法返回轉(zhuǎn)換為大寫的字符串的值 if(button[i].innerHTML==index.key.toUpperCase()){ button[i].classList.add('active') }; } //innerHTML 屬性是文檔對(duì)象模型的一部分 p.innerHTML+=index.key if(index.key=='Backspace'){ p.innerHTML=p.innerHTML.slice(0 , -10) } }) document.body.addEventListener('keyup' , function(index){ for(let j=0 ; j<button.length ; j++){ if(button[j].innerHTML == index.key.toUpperCase()){ button[j].classList.remove('active') } } })
現(xiàn)在您必須用鼠標(biāo)執(zhí)行按鈕。這意味著您可以使用鼠標(biāo)手動(dòng)單擊這些按鈕,并且可以在信息結(jié)果框中找到該按鈕。
for(let x of button){ //當(dāng)用戶按下鼠標(biāo)按鈕時(shí)發(fā)生 MouseDown x.addEventListener('mousedown' , function(){ x.className='active' p.innerHTML+=x.innerHTML }) } //MouseUp 在用戶釋放鼠標(biāo)按鈕時(shí)發(fā)生 for(let y of button){ y.addEventListener('mouseup' , function(){ y.className='' }) } space.addEventListener('mousedown',function(){ space.classList.add('active') p.innerHTML+=" " }) space.addEventListener('mouseup',function(){ space.classList.remove('active') }) function back(){ Backspace.className+=' active' p.innerHTML=p.innerHTML.slice(0 , -1) } //onmousedown 屬性在元素上按下鼠標(biāo)按鈕時(shí)觸發(fā) Backspace.onmousedown=back //當(dāng)用戶在元素上釋放鼠標(biāo)按鈕時(shí)發(fā)生 onmouseup 事件 Backspace.onmouseup=function(){ Backspace.classList.remove('active') }
現(xiàn)在是時(shí)候?yàn)橛|摸屏實(shí)現(xiàn)這個(gè)簡(jiǎn)單的虛擬鍵盤了。這使您可以通過移動(dòng)設(shè)備控制此數(shù)字鍵盤。
for(let x of button){ //touchstart 事件在用戶觸摸元素時(shí)發(fā)生 x.addEventListener('touchstart' , function(){ x.className='active' }) } for(let y of button){ //當(dāng)用戶將手指從元素上移開時(shí)發(fā)生 touchend 事件 y.addEventListener('touchend' , function(){ space.classList.remove('active') }) } space.addEventListener('touchstart',function(){ space.classList.add('active') }) space.addEventListener('touchend',function(){ space.classList.remove('active') }) Backspace.addEventListener('touchstart',function(){ Backspace.className+=' active' }) Backspace.addEventListener('touchend',function(){ Backspace.classList.remove('active') })
上面我們以三種方式激活了這個(gè)虛擬屏幕鍵盤。請(qǐng)?jiān)u論您如何喜歡這個(gè)虛擬鍵盤組件??梢栽谖哪┑南螺d按鈕獲取 JavaScript 虛擬鍵盤的源碼。
以上就是利用JavaScript實(shí)現(xiàn)創(chuàng)建虛擬鍵盤的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于JavaScript虛擬鍵盤的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
原生js實(shí)現(xiàn)簡(jiǎn)單輪播圖效果
這篇文章主要為大家詳細(xì)介紹了原生js實(shí)現(xiàn)簡(jiǎn)單輪播圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09基于Javascript實(shí)現(xiàn)文件實(shí)時(shí)加載進(jìn)度的方法
不知道大家有沒有發(fā)現(xiàn)在現(xiàn)在的移動(dòng)頁面上,有很多情況需要加載大量的資源。但是移動(dòng)端的訪問速度和pc還是有很大的差距,有些時(shí)候需要一些取巧的方式來提升用戶體驗(yàn),而實(shí)時(shí)顯示加載進(jìn)度就是其中一種。這篇文章就給大家分享了Javascript實(shí)現(xiàn)文件實(shí)時(shí)加載進(jìn)度的方法。2016-10-10javascript實(shí)現(xiàn)Table排序的方法
這篇文章主要介紹了javascript實(shí)現(xiàn)Table排序的方法,涉及javascript針對(duì)表格對(duì)象的獲取與排序相關(guān)技巧,需要的朋友可以參考下2015-05-05js 獲取json數(shù)組里面數(shù)組的長(zhǎng)度實(shí)例
下面小編就為大家?guī)硪黄猨s 獲取json數(shù)組里面數(shù)組的長(zhǎng)度實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10如何用uni-app實(shí)現(xiàn)頂部導(dǎo)航欄顯示按鈕和搜索框
本文介紹了如何用uni-app實(shí)現(xiàn)頂部導(dǎo)航欄顯示按鈕和搜索框,感興趣的同學(xué),可以參考下,并且試驗(yàn)一下。2021-06-06JavaScript時(shí)間格式化函數(shù)功能及使用示例
這篇文章主要為大家介紹了JavaScript時(shí)間格式化函數(shù)功能及使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11