热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

答题微信小程序实现(5):大功告成,整个模板,题库导入/切换/积分/选择对错判断/闯关成功

哎呀妈呀,总算弄完了,可以干点别的去了。第1个是初始页面,第2个是选错的样子,选对了是绿色,第3个是全答完了,跳转题库告罄的页面,第四个结构。data文件夹下面有一个post-data.j

哎呀妈呀,总算弄完了,可以干点别的去了。
这里写图片描述
第1个是初始页面,第2个是选错的样子,选对了是绿色,第3个是全答完了,跳转题库告罄的页面,第四个结构。
data文件夹下面有一个post-data.js文件,pages下面是index、tiaozhuan文件夹。
其他的不用管,跟程序没关系。
一个一个来。先看post-data.js。

var local_database = [{
"name": "收取关山五十州上句是什么?",
"daan": "A",
"content": ["男儿何不带吴钩", "天若有情天亦老", "大漠沙如雪", "主父西游何时归"]
},
{
"name": "危乎高哉上句是什么?",
"daan": "B",
"content": ["明朝散发弄扁舟", "蜀道难,难于上青天", "床前明月光", "吾爱孟夫子"]
},
{
"name": "感时花溅泪下句是什么?",
"daan": "C",
"content": ["也无风雨也无晴", "明月几时有", "恨别鸟惊心", "老夫聊发少年狂"]

}
]
module.exports = {
postList: local_database
}

就三道题。这个题库是json数组格式的,require可以调用小程序内部的网页,但也可以调用外部网页,不过先要在微信小程序的设置里面检校安全域名,调用外部网页有一个好处,就是题库可以在线更新。这个题库的模板可以通过python生成,用python写几行代码批处理一下,估计用excel也能实现,以后再写一篇用python处理题库的文章吧。
tiaozhuan文件夹下面一个tiaozhuan的页面,没啥,就是wxml里面有一行。

<text>题库告罄text>

主要是index这个。
index.wxml代码:

<scroll-view>
<view>
{{postList[index].name}}view>
<view hidden="{{ny}}">{{postList[index].daan}}view>
scroll-view>
<scroll-view>
<button id='A' bindtap="btnOpClick" style="background-color: {{bcA}};">{{postList[index].content[0]}}button>
<button id='B' bindtap="btnOpClick" style="background-color: {{bcB}};">{{postList[index].content[1]}}button>
<button id='C' bindtap="btnOpClick" style="background-color: {{bcC}};">{{postList[index].content[2]}}button>
<button id='D' bindtap="btnOpClick" style="background-color: {{bcD}};">{{postList[index].content[3]}}button>
scroll-view>
<button bindtap="lastQuestion">上一题button>
<button bindtap="nextQuestion">下一题button>
<button bindtap="xianshi">显示答案button>
<text>积分:每答对一题积2分,目前得分{{defen}}text>

这个主要看设定了一个变量index,这个是序号,然后为了隐藏答案,设定了hidden的值,它的默认值是true。四个函数,btnOpClick、lastQuestion、nextQuestion、xianshi。这玩意说不太清楚,照着写一遍就都弄明白了。

index.js代码:

var postData = require("../../data/post-data.js");
Page({
data: {
// text:"这是一个页面"
postList: postData.postList,
index:0,
bc_default: '#FBFBFB',
bc_right: '#98FB98',
bc_wrong: '#FF99B4',
bcA: '',
bcB: '',
bcC: '',
bcD: '',
ny:'true',
defen:0
},

nextQuestion: function () {
var that = this;
if (that.data.index 1) {
this.setData({
index: that.data.index + 1,
bcA: that.data.bc_default,
bcB: that.data.bc_default,
bcC: that.data.bc_default,
bcD: that.data.bc_default,
ny:'true'

});
}
},
lastQuestion: function () {
var that = this;
if (that.data.index > 0) {
this.setData({
index: that.data.index - 1
});
}
},
btnOpClick: function(e){
var that = this;
var select = e.currentTarget.id;
var jieg = postData.postList[that.data.index].daan;
if (select==jieg){
if (that.data.index 1){
if (select == 'A') {
this.setData({ bcA: that.data.bc_right });
}
else if (select == 'B') {
this.setData({ bcB: that.data.bc_right });
}
else if (select == 'C') {
this.setData({ bcC: that.data.bc_right });
}
else if (select == 'D') {
this.setData({ bcD: that.data.bc_right });
}
that.nextQuestion();
this.setData({
defen: that.data.index*2
})
}
else{
if (select == 'A') {
this.setData({ bcA: that.data.bc_right });
}
else if (select == 'B') {
this.setData({ bcB: that.data.bc_right });
}
else if (select == 'C') {
this.setData({ bcC: that.data.bc_right });
}
else if (select == 'D') {
this.setData({ bcD: that.data.bc_right });
}
that.gotonext();
}
}
else {
if (select == 'A') {
this.setData({ bcA: that.data.bc_wrong });
}
else if (select == 'B') {
this.setData({ bcB: that.data.bc_wrong });
}
else if (select == 'C') {
this.setData({ bcC: that.data.bc_wrong });
}
else if (select == 'D') {
this.setData({ bcD: that.data.bc_wrong });
}
else if (select == 'E') {
this.setData({ bcE: that.data.bc_wrong });
}
}
},
gotonext: function(){
wx.navigateTo({
url: './../tiaozhuan/tiaozhuan',
})
},
xianshi: function(){
this.setData({
ny:''
})
}
})

对我来说,这个代码挺长的了。
data里面给所有的值一个初始化。
上一题LastQuestion和下一题Next Question在答题微信小程序(4)里面已经都说过了。这里就不重复了。注意that.data.index的用法,必须得在前面加上that.data才行,直接上index不行,同理还有that.data.bc_default等,还有postData.postList.length 获取题库长度,可以写成that.data.postList.length,但不能写成postList.length。这种固定用法,知道了就觉得也就那么回事,但不知道的时候挺闹心,不知道自己哪里出错了,为什么运行不出来。
btnOpClick这个函数挺长的,不过只要知道它的规律就很好理解了,就是对正确答案的判断,选择题有ABCD四个选项,点击对了就把button按钮的颜色改成绿色,’#98FB98’;错了就把button按钮的颜色改成红色,#FF99B4;进入下一题的时候把button按钮的颜色改回#FBFBFB。答完本题之后,that.nextQuestion(),调用nextQuestion函数,进入下一题。不过要是最后一题的时候,答完之后就要进入闯关成功的页面了,that.gotonext(),进入tiaozhuan页面, wx.navigateTo。
我觉得if语句挺好理解的。这个index.js中有点难的是下面这两行。
var select = e.currentTarget.id;
声明select=点击对象的id,这个id在index.wxml中设置了。
var jieg = postData.postList[that.data.index].daan;
声明当前题的答案=postData.postList[that.data.index].daan,注意that.data的用法。
我在撸这个答题程序代码的时候,主要就是卡在了currentTarget和that.data上了,它主要是一个固定用法的参数传递,可能是我的基础太薄弱了吧,不过多写两次,明白了就没问题了。
所以说还是要多练。
我估计我再写两篇,就能把这个微信答题小程序的专题告结了,一篇是wxml的设计,跟前端里的css一样吧,把页面设计得好看一些,现在的压根就没有设计。再一篇就是python对题库的处理,把一篇文档处理成json格式的。
这些完事儿的话,就去做一个网络地图,然后学习数据挖掘分析。
还是保持这个习惯吧,不要一上来就硬啃,把难的东西拆解开来,一步一步攻克,一点一点实现。循序渐进。忽然想回学校读书去了。

参考源码来源于这个网站。

http://www.henkuai.com/forum-67-1.html


推荐阅读
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • Oracle10g备份导入的方法及注意事项
    本文介绍了使用Oracle10g进行备份导入的方法及相关注意事项,同时还介绍了2019年独角兽企业重金招聘Python工程师的标准。内容包括导出exp命令、删用户、创建数据库、授权等操作,以及导入imp命令的使用。详细介绍了导入时的参数设置,如full、ignore、buffer、commit、feedback等。转载来源于https://my.oschina.net/u/1767754/blog/377593。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
author-avatar
想想以前哦
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有