在微信小程序中使用“隨機鍵盤”

最近研究微信小程序,發現在手機上使用系統鍵盤非常不方便,一是按鍵太小,對于小學生來說,操作非常不方便;二是系統鍵盤反復切換影響界面布局。于是自己決定自己寫一個隨機的小鍵盤。

原理非常簡單:拿“口算練習”來說,總共只設置四個數字輸入鍵和一個“Del”鍵,隨機從0-9這10個數字隨機顯示四個數字就足夠了,當然這四個數字必須包含答案所含的數字。

如下圖中界面所示:習題為“9+77=?”,答案為86,先提出8和6,再從剩下的01234579八個數字中隨機取兩個數字,之后和8、6總共四個數字再進行隨機排序,最后分別顯示在四個數字鍵上,OK!




生成“隨機鍵盤”的代碼如下:


 MakeNumBtn: function () {
    function getRandomArrayElements(arr, count) {var shuffled = arr.slice(0), i = arr.length, min = i - count, temp, index;while (i-- > min) {index = Math.floor((i + 1) * Math.random());temp = shuffled[index];shuffled[index] = shuffled[i];shuffled[i] = temp;}return shuffled.slice(min);}if (op === "+") {ans = A + B;} else if (op === "-") {ans = A - B;} else if (op === "×") {ans = A * B;} else if (op === "÷") {ans = A / B;} var nums = '0123456789'var arrAns = [];var temp = ans.toString().split('');for (var i = 0; i < temp.length; i++) {if (arrAns.indexOf(temp[i]) == -1) {arrAns.push(temp[i]);}nums = nums.replace(temp[i], '');}arrAns = getRandomArrayElements(arrAns.concat(getRandomArrayElements(nums.split(''), 4 - arrAns.length)), 4);this.setData({ btn1: arrAns[0] });this.setData({ btn2: arrAns[1] });this.setData({ btn3: arrAns[2] });this.setData({ btn4: arrAns[3] });},

對于英文鍵盤跟上邊差不多,在“單詞拼寫”小程序中,沿用上述解決方法,只不過把0-9數字換成了a-zA-Z加上英文“'”和"-",由于英文單詞長度都比較長,無法一次全部輸入,采用的是變通的方法,每次鍵盤顯示需要當前輸入的字母,輸入后顯示下個字母的鍵盤。具體界面如下圖:





主要代碼如下:

MakeInputBtn: function () {if (this.data.mEnglish.length == this.data.inputValue.length) {return;}    function getRandomArrayElements(arr, count) {var shuffled = arr.slice(0), i = arr.length, min = i - count, temp, index;while (i-- > min) {index = Math.floor((i + 1) * Math.random());temp = shuffled[index];shuffled[index] = shuffled[i];shuffled[i] = temp;}return shuffled.slice(min);} var letters = "abcdefghijklmnopqrstuvwxyz'- ABCDEFGHIJKLMNOPQRSTUVWXYZ"var arrAns = [];var currentLetter = this.data.mEnglish[this.data.inputValue.length];//console.log(currentLetter);if (currentLetter) {var temp = currentLetter.toString().split('');for (var i = 0; i < temp.length; i++) {if (arrAns.indexOf(temp[i]) == -1) {arrAns.push(temp[i]);}letters = letters.replace(temp[i], '');}arrAns = getRandomArrayElements(arrAns.concat(getRandomArrayElements(letters.split(''), 4 - arrAns.length)), 4);this.setData({ btn1: arrAns[0] });this.setData({ btn2: arrAns[1] });this.setData({ btn3: arrAns[2] });this.setData({ btn4: arrAns[3] });}}

“口算”小程序的完整代碼:https://github.com/JackieZheng/xxks.Jackie.wApp

上述兩個小程序已經發布上線,有興趣可以到我的微信公眾號查看,有問題可以在公眾號留言,有寫的不好的地方,歡迎指正。



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286588.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286588.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286588.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android之提示訂閱配置訂閱需要傳新的包 添加結算權限。

1 問題 apk上google應用市場&#xff0c;然后開通支付商品&#xff0c;錯誤提示如下 2 解決辦法 AndroidManifest.xml里面添加谷歌支付權限 <!-- google pay --><uses-permission android:name"com.android.vending.BILLING" />

【前端就業課 第一階段】HTML5 零基礎到實戰(三)一篇文CSS基礎入門

注意&#xff1a;手機&#xff08;APP&#xff09;打開&#xff0c;內容顯示更佳&#xff0c;不會的私聊博主即可 想要拿代碼或加入學習計劃&#xff08;** 博主會監督你并且教你寫文章 **&#xff09;的拉到最下面&#xff08;PC端Web打開&#xff09;加博主即可&#xff0c;目…

C#如何獲取實體類屬性名和值?

數據模型定義public class User{public User(){student new student();}public string name { get; set; }public string gender { get; set; }public int age { get; set; }public student student { get; set; }}public class student{public int ID { get; set; }public st…

將VNC 安裝在Centos 7步驟

&#xff08; Virtual Network Computing&#xff09;VNC允許Linux系統可以類似實現像Windows中的遠程桌面訪問那樣訪問Linux桌面。本文配置機器是興寧市網絡信息中心的一臺Centos 7 HP服務器環境下運行。 首先試試服務器裝了VNC沒 [rootwic ~]# rpm -q tigervnc tigervnc-serv…

利用MRT進行Modis NDVI數據(MOD13Q1)投影變換格式轉換操作圖文教程

本實例以Modis NDVI(MOD13Q1,空間分辨率為250m)一景影像數據為例,演示利用MRT進行Modis NDVI影像變換,主要內容包括:將.hdf格式轉為.tif格式,將坐標系轉為Albers等積投影。 ArcGIS完美轉換方法: 《ArcGIS10.8完美實現MODIS NDVI數據格式轉換和投影變換》 《重磅!ArcGI…

ActiveMQ無法啟動

解決辦法&#xff1a;activemq無法啟動&#xff0c;端口被占用 用netstat -an無法查出61616被哪個進程占用&#xff08;實踐證明&#xff0c;netstat -ano|findstr 61616什么也沒有找到&#xff09; 經過排查和網上資料參考&#xff0c;被windows的Internet connection share(I…

Android之升級OkHttp編譯提示錯誤如下Using ‘body(): ResponseBody?’ is an error. moved to val

1 問題 升級okHttp庫&#xff0c;編譯項目錯誤如下 Using ‘body(): ResponseBody?’ is an error. moved to val 2 解決辦法 原來的代碼 val list response.body().string() 去掉&#xff08;&#xff09;就可以了 val list response.body.string()

單例

當實際上Singleton是一個對象&#xff0c;我們不能保證使用者不會使用其他的方法去創建&#xff08;比如alloc&#xff09;,這個時候他就會創建多個實例&#xff0c;這樣就會出現這些無法感知的bug&#xff09; implementation Singleton static Singleton * sharedSingleton …

Google 開源的 Android 排版庫:FlexboxLayout

最近Google開源了一個項目叫「FlexboxLayout」。1.什么是 Flexbox簡單來說 Flexbox 是屬于web前端領域CSS的一種布局方案&#xff0c;是2009年W3C提出了一種新的布局方案&#xff0c;可以簡便、完整、響應式地實現各種頁面布局&#xff0c;并且 React Native 也是使用的 Flex 布…

Docker Network 配置,自定義bridge網絡

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182Docker Network 配置&#xff0c;自定義bridge網絡 1.停止服務 service docker stop 2.關掉docker0 ifconfi…

再見 KataCoda——O'Reilly 宣布其將在六月份關閉

近日聽聞 OReilly 將永久關閉在線學習網站 KataCoda&#xff0c;對于廣大程序員和學習者來說&#xff0c;這無疑是一件痛心疾首的事情&#xff0c;以后我們再也看不到那只會變成的功夫貓了。KataCoda 簡介KataCoda 成立于 2016 年&#xff0c;它是一個在線學習平臺&#xff0c;…

中國區域Modis行列號(附Shapefile文件下載)

重磅&#xff1a;Landsat中國西北地區行列號Shapefile圖層對照&#xff08;附行列號Shapefile下載&#xff09; 全球&#xff1a; 中國&#xff1a;

Android之解決webview加載第三方網頁點擊彈不出下拉框(html頁面里面的select標簽)

1 問題 決webview加載第三方網頁點擊彈不出下拉框&#xff08;html頁面里面的select標簽&#xff09;&#xff0c;我們訪問youtube.com官網&#xff0c;點擊網站的視頻&#xff0c;點擊視頻右上角三個點設置&#xff0c;然后點擊 播放設置 然后點擊畫質 彈不出選項框&#xf…

【前端就業課 第一階段】HTML5 零基礎到實戰(四)偽類與偽元素

注意&#xff1a;手機&#xff08;APP&#xff09;打開&#xff0c;內容顯示更佳&#xff0c;不會的私聊博主即可 想要拿代碼或加入學習計劃&#xff08;** 博主會監督你并且教你寫文章 **&#xff09;的拉到最下面&#xff08;PC端Web打開&#xff09;加博主即可&#xff0c;目…

編寫第一個響應式頁面

2019獨角獸企業重金招聘Python工程師標準>>> 本文為大家講解如何使用一種科學的方法實現網頁設計&#xff0c;從原理上搞清楚什么是響應式設計&#xff0c;并實現一個簡易的響應式設計框架&#xff0c;以此為基礎&#xff0c;編寫出第一個響應式頁面。 不知道現在大…

container 的背后

如果要看laravel的單個功能的源代碼&#xff0c;首先去找對應得ServiceProvider,例如加密功能hash,則按一下步驟查看源代碼&#xff1a; HashServiceProvider.php(主要是看register方法) singleton()方法就是將BcryptHasher這個類實例化一次&#xff0c;然后在哪里都可以用&…

android中像素單位dp、px、pt、sp的比較

dp(dip): device independent pixels(設備獨立像素). 不同設備有不同的顯示效果,這個和設備硬件有關&#xff0c;一般我們為了支持WVGA、HVGA和QVGA 推薦使用這個&#xff0c;不依賴像素。px: pixels(像素). 不同設備顯示效果相同&#xff0c;一般我們HVGA代表320x480像素&…

ArcGIS10.8完美實現MODIS NDVI數據格式轉換和投影變換

大家都熟知,MODIS NDVI數據的處理一般是在MRT中進行的,但熟不知ArcGIS中也可以實現投影變換個數據格式的轉換,本文就以MOD13Q1.A2020001.h26v05.006.2020018002618.hdf這一景影像為例,實現將正弦曲線投影轉換為Albers等積投影,將hdf格式轉為tif。 ArcGIS python批處理代碼…

開源項目千千萬,如何發現好項目

視頻來自 OSSInsight 推特。不知道大家聽說沒有 PingCAP 推出的一個 OSSInsight.io 網站&#xff0c;可以根據 GitHub 上的事件&#xff0c;提供開源軟件洞察&#xff0c;這個項目也開源在 GitHub[1] 上。它可以提供以下方面的洞察能力&#xff0c;有點類似于 Google Analytics…

Git之回退已經提交到遠程倉庫的代碼(已經push的代碼)

1 問題 git 把當前的修改已經push到遠程倉庫&#xff0c;現在需要回退這個遠程提交 2 解決辦法 1&#xff09;、我們用git log命令找到commit Id d6434e39e842a40b79119b2b88e76dd1498f8654是我最后一次提交&#xff0c; 然后我們現在需要回退到145c4fc7f237176acba1bca515e9…