欢迎光临,了解微信小程序开发,就上易用通!

在微信小程序中使用“随机键盘”

发布:2018-05-08 10:55浏览: 来源:网络 作者:cola

最近研究微信小程序,发现在手机上使用系统键盘非常不方便,一是按键太小,对于小学生来说,操作非常不方便;二是系统键盘反复切换影响界面布局。于是自己决定自己写一个随机的小键盘。

原理非常简单:拿“口算练习”来说,总共只设置四个数字输入键和一个“Del”键,随机从0-9这10个数字随机显示四个数字就足够了,当然这四个数字必须包含答案所含的数字。

如下图中界面所示:习题为“9+77=?”,答案为86,先提出8和6,再从剩下的01234579八个数字中随机取两个数字,之后和8、6总共四个数字再进行随机排序,最后分别显示在四个数字键上,OK!

在微信小程序中使用“随机键盘”(图1)

生成“随机键盘”的代码如下:

 

  1. MakeNumBtn: function () {
  2. function getRandomArrayElements(arr, count) {
  3. var shuffled = arr.slice(0), i = arr.length, min = i - count, temp, index;
  4. while (i-- > min) {
  5. index = Math.floor((i + 1) * Math.random());
  6. temp = shuffled[index];
  7. shuffled[index] = shuffled[i];
  8. shuffled[i] = temp;
  9. }
  10. return shuffled.slice(min);
  11. }
  12.  
  13. if (op === "+") {
  14. ans = A + B;
  15. } else if (op === "-") {
  16. ans = A - B;
  17. } else if (op === "×") {
  18. ans = A * B;
  19. } else if (op === "÷") {
  20. ans = A / B;
  21. }
  22. var nums = '0123456789'
  23. var arrAns = [];
  24.  
  25. var temp = ans.toString().split('');
  26. for (var i = 0; i < temp.length; i++) {
  27. if (arrAns.indexOf(temp[i]) == -1) {
  28. arrAns.push(temp[i]);
  29. }
  30. nums = nums.replace(temp[i], '');
  31. }
  32. arrAns = getRandomArrayElements(arrAns.concat(getRandomArrayElements(nums.split(''), 4 - arrAns.length)), 4);
  33. this.setData({ btn1: arrAns[0] });
  34. this.setData({ btn2: arrAns[1] });
  35. this.setData({ btn3: arrAns[2] });
  36. this.setData({ btn4: arrAns[3] });
  37. },

对于英文键盘跟上边差不多,在“单词拼写”小程序中,沿用上述解决方法,只不过把0-9数字换成了a-zA-Z加上英文“'”和"-",由于英文单词长度都比较长,无法一次全部输入,采用的是变通的方法,每次键盘显示需要当前输入的字母,输入后显示下个字母的键盘。具体界面如下图:

在微信小程序中使用“随机键盘”(图2)

在微信小程序中使用“随机键盘”(图3)

在微信小程序中使用“随机键盘”(图4)

主要代码如下:

 

  1. MakeInputBtn: function () {
  2. if (this.data.mEnglish.length == this.data.inputValue.length) {
  3. return;
  4. }
  5.  
  6. function getRandomArrayElements(arr, count) {
  7. var shuffled = arr.slice(0), i = arr.length, min = i - count, temp, index;
  8. while (i-- > min) {
  9. index = Math.floor((i + 1) * Math.random());
  10. temp = shuffled[index];
  11. shuffled[index] = shuffled[i];
  12. shuffled[i] = temp;
  13. }
  14. return shuffled.slice(min);
  15. }
  16. var letters = "abcdefghijklmnopqrstuvwxyz'- ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  17. var arrAns = [];
  18.  
  19. var currentLetter = this.data.mEnglish[this.data.inputValue.length];
  20. //console.log(currentLetter);
  21. if (currentLetter) {
  22. var temp = currentLetter.toString().split('');
  23. for (var i = 0; i < temp.length; i++) {
  24. if (arrAns.indexOf(temp[i]) == -1) {
  25. arrAns.push(temp[i]);
  26. }
  27. letters = letters.replace(temp[i], '');
  28. }
  29. arrAns = getRandomArrayElements(arrAns.concat(getRandomArrayElements(letters.split(''), 4 - arrAns.length)), 4);
  30. this.setData({ btn1: arrAns[0] });
  31. this.setData({ btn2: arrAns[1] });
  32. this.setData({ btn3: arrAns[2] });
  33. this.setData({ btn4: arrAns[3] });




免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。

在线客服1:
点击这里给我发消息

在线客服2:
点击这里给我发消息

商务客服:
点击这里给我发消息

服务时间:
9:00-18:00(工作日)