消防安全知识答题活动小程序v4.3.0

消防安全知识答题活动小程序v4.3.0

v4.3.0

1)实现答题倒计时功能

如果让你给一款答题小程序产品制定一个技术方案,比如实现答题倒计时功能,你会怎么做。

通常,我们对于倒计时的普遍认知是设置一个定时器去实现的,在定时到期以后执行注册的回调函数。基于这个认识,我们看看具体是怎么实现的,或是实现方案有哪些。

①setTimeout

有的同学可能会选择使用setTimeout,看看他是怎么实现的。首先是定义一个countDown函数,里面主要是一个执行setTimeout的函数体,在setTimeout里执行countDown。页面加载时,调用一次countDown,然后每一秒调用一次countDown。

Page({ 
  /**
   * 页面的初始数据
   */
  data: {
      count: 50
    },
    /**
       * 生命周期函数--监听页面加载
       */
    onLoad() {
      // 函数执行
      this.countDown();
    },
  	//倒计时函数的定义
    countDown() {
      const that = this;
      const { count } = that.data;
      //定时器
      const time = setTimeout(function () {
        that.setData({
          count: count - 1,
        });
        // 函数执行
        that.countDown();
      }, 1000);
    },
  })

确实是可以实现答题倒计时功能,但是这种技术方案存在着比较大的缺陷或者性能问题。当然,每一种技术方案都存在其优缺点,没有完美一说。但是,我们就是要在具体问题具体分析,找到对应当前应用场景或者当前业务需求的最优解。

②setInterval

提供多一种思路,多一种选择和可能性。我们看看另一种解决方案,setInterval。通过setInterval设定一个定时器,按照指定的周期(以毫秒计)来执行注册的回调函数。

Page({

  /**
   * 页面的初始数据
   */
  data: {
    secondsNum: 600
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad() {
   	 // 函数执行
      this.countDown();
  },
  //倒计时函数的定义
    countDown() {
    	let secondsNum = this.data.secondsNum;
      //定时器
      let timer = setInterval(() => {
        secondsNum--;
        this.setData({
          secondsNum
        });
      }, 1000);
   },
})

2)实现限时作答功能

实现限时作答功能,其实就是当倒计时结束之后,程序需要做什么操作,比如做一些提示、限制不能继续作答了或者是系统强制交卷等。

①首先,如何判断倒计时结束呢?

通过判断secondsNum是否为0,是则倒计时结束,否则还没结束。

if (this.data.secondsNum == 0) {
  		// 弱提示
      wx.showToast({
        title: '答题时间到!\n已为您自动提交答卷!',
        icon: 'none',
        duration:3000,
        mask:true
      })
 }

②系统强制交卷

if (this.data.secondsNum == 0) {
      wx.showToast({
        title: '答题时间到!\n已为您自动提交答卷!',
        icon: 'none',
        duration:3000,
        mask:true
      });
  
  	 //系统自动提交
     this.addExamRecord();
  
  		// 取消由 setInterval 设置的定时器
  		clearInterval(timer);
 }

当然,这种方式也是存在一定的的缺陷或者性能问题。但是相对比前一种,不失为一种优化方向。后续,我也会在此基础上,再给出进一步优化的完整的解决方案。大家也可以先思考一下,可以相互交流交流。

v4.2.0

1)支持选项乱序

v4.1.0

1)支持多选题

2)支持填空题

v3.0.0

1)升级功能:

  • 答题页、结果页界面,增加展示微信头像和昵称栏目√
  • 由仅支持单选,升级为支持单选、判断、多选题型 √
  • 排行榜页排名机制,优化为取个人最佳成绩进行排名√
  • 各界面及功能一些小优化√

2)拓展功能:

  • 注册登录页 √
  • 错题集 √
  • 题库学习 √
  • 查看用户的答题成绩以及答题情况-管理员 √
  • 查看所有用户的答题记录-管理员 √
  • 后台题库管理系统-管理员 √
  • 题目增删查改-管理员 √

3)基于v2.0拓展升级:

  • 排行榜页
  • 活动规则页
  • 答题记录页
  • 首页、答题页、结果页
  • 微信授权登录
  • 获取微信头像和昵称等
  • 实现页面间跳转功能
  • 实现转发分享答题成绩功能
  • 题库随机抽题
  • 查询历史成绩
  • 实现用云开发实现查询题库功能
  • 实现动态题目数据绑定
  • 答题交互逻辑
  • 切换下一题
  • 系统自动判分
  • 提交答卷保存到云数据库集合
  • 答题结果页从云数据库查询答题成绩
  • 题库学习
  • 注册登录页
  • 支持单选、判断题型
  • 错题集
  • 查看用户的答题成绩以及答题情况-管理员
  • 查看所有用户的答题记录-管理员
  • 后台管理-管理员
  • 后台数据监控-管理员

v2.0.0

  • 活动规则页
  • 排行榜页
  • 答题记录页
  • 题库随机抽题
  • 微信授权登录
  • 获取微信头像和昵称等
  • 首页、答题页、结果页
  • 实现页面间跳转功能
  • 实现转发分享答题成绩功能
  • 实现用云开发实现查询题库功能
  • 实现动态题目数据绑定
  • 答题交互逻辑
  • 切换下一题
  • 系统自动判分
  • 提交答卷保存到云数据库集合
  • 查询历史成绩
  • 答题结果页从云数据库查询答题成绩

猜你喜欢

转载自blog.csdn.net/qq_29528701/article/details/130947417