为了记住单词,我花了两天时间写了一个单词小程序

2020-12-15
来源:

前言

“如果未在测试中测试英语,那就太好了”

嘿,这是可悲的提英语。有时我严重怀疑我不是学习英语的材料。言语被遗忘,被遗忘和被遗忘。考试前,您可以阅读任何单词。进入考试室后:这个词是什么意思?

痛苦的英语学习在头两个月又开始了。开始:背诵单词。首先,请遵循前面的方法并设置每天要记住的单位数,依此类推...记住后,测试您自己的单词数。我很傻,我仍然不记得我记住的话...

总结失败经历,百度:为什么这些单词不能被很好地记住?发现:Ebbinghaus忘记了曲线[了解一点,还没有练习]。为了验证Ebbinghaus遗忘曲线是否有效,海虹根据遗忘形式(我中间几天没有坚持)记住了一个月的单词,然后单击测试网站,哈哈,实际增加的单词数[具体改进]我不会说多少,或者您可以猜测总共有多少个单词]

到目前为止,我已经使用了多个文字应用程序,这些应用程序虽然不错,但是我不适合我。

为什么要自己写o( ̄︶ ̄)o要实现的功能如下:

程序的屏幕截图

过程

1、确定数据结构

2、确认功能

背单词小程序开发

3、具体想法

对于Ebbinghaus被遗忘表格,第一个想法是将其保存为二维表。首次加载界面时,请获取当前日期,与数据库用户的日期有所不同,然后计算当日应阅读和复习的章节。之后,我不知道发生了什么,我一直在报告错误,也不知道出了什么问题。后来,我不得不采用一种愚蠢的方法:一维数组存储。部分代码如下:


   form_18: [3,11,14,16,17,18],    form_19: [4,12,15,17,18,19],    form_20: [5,13,16,18,19,20],    form_21: [6,14,17,19,20,21],    form_22: [7,15,18,20,21,22],    form_23: [8,16,19,21,22,23],    form_24: [9,17,20,22,23,24],

如何背诵单词?海虹在这里采用的方法是:根据计算出的章节数组,依次获取相应章节中的单词,然后循环显示在界面上。要背单词,首先,界面上只会显示一个单词。用户需要根据他是否认识到其含义来选择“不知道”或“识别”。选择“不知道”以显示其含义,并将单词信息添加到审阅队列中,错误数为+1;选择“识别”以读取和写入下一个单词。学习了今天的词汇后,开始重新阅读那些无法识别的词汇。您必须了解词汇表的所有含义。只要您不知道,它就会一直循环播放,直到您知道为止。 //有点狠


fontFamily: 'HaihongPro',//字体名字    loaded: false,//判断字体加载是否完成    first_words:1,//递增 用于翻转数组    words:"",//一章节的单词    words_length:0,//一章节单词的个数    word:"",//当前单词    isshowexplain:false,//是否展现单词意思 默认:false    id_word:0,//一个章节中单词的位置 第几个 初始:0    id_day_length:0,//背诵表数组的长度    id_day: "",//背诵表数组    review_words:[],//不认识的单词    isreview:false,//是复习单词吗 默认:不是    ishaveload_reviewwords:false,//是否已经加载不认识的单词    isknow:true,// 复习模式 判断是认识的next 还是不认识的next 默认:true    isrv:false,    isexist:false,//是否含有用户    openid:"",//用户openid    today_wordnums:0,//今日背诵单词数量    review_wordnums:0,//今日复习单词数量    today_chapter:1,//今日单词章节    result:false,

从思考的角度来看,这并不困难。一开始,海虹就这么认为。但是,当您自己真正开发它时,它已经结束并且太困难了。无论是“知道” /“下一步”,方法都是相同的。困难在于如何用一种方法来区分不同的情况。例如,有来自新研究的知识和来自审查的知识。逻辑比较强,并且大部分时间都花在这里!演示代码的一部分如下:


// 下一个单词   nextword:function(){    wx.vibrateShort({})    var k=this    // 背诵新单词+复习前几天的单词    if(k.data.isreview==false)    {      // 没有背完一个章节      if (k.data.id_word << span=""> k.data.words_length - 1) {        k.setData({          id_word: k.data.id_word + 1,          word: k.data.words[k.data.id_word + 1],          isshowexplain: false,        })      }      // 背完了该章节      else {        // 所有章节都背完了        if (k.data.first_words == k.data.id_day_length+2) {          console.log("所有章节背完")          wx.showToast({            title: '背完啦\(^o^)/~',            icon: "none",            mask:true          })          // 当今天新单词背诵完毕 立刻复习今天的单词          k.setData({            isshowexplain:false,            isreview:true,            isrv:true,                  })        }        // 获取下一章节 单词        else {          wx.showLoading({            title: '下一章节',            mask: true          })          console.log("本章节背完了,背下一个章节了")          // 获取下个一个背诵章节的单词                db.collection('words').where({            chapter: parseInt(k.data.id_day[k.data.id_day_length - k.data.first_words])          }).get().then(res => {            console.log(res.data[0])//这一天第一个需要背诵的章节            wx.hideLoading()            k.setData({              words: res.data[0].words,//第一章节的所有单词              words_length: res.data[0].words.length,//第一章节单词数量              word: res.data[0].words[0],//第一章节第一个单词              first_words: k.data.first_words + 2,              id_word: 0,//              isshowexplain: false,              review_wordnums: k.data.review_wordnums + res.data[0].words.length            })          }).catch(err => {            wx.showToast({              title: '出错啦',              icon: "none",              mask: true            })          })        }      }    }    // 复习今天背诵的单词    else    {      // 不需要复习      if(k.data.review_words.length==0)      {        wx.showLoading({          title: '\(^o^)/~',        })        var time = util.formatTime(new Date())        // 如果记录中存在该用户        console.log(k.data.isexist)        if (k.data.isexist==="true")        {          console.log("更新数据x")          console.log(time)          console.log(k.data.today_chapter)          console.log(k.data.today_wordnums)          console.log(k.data.openid)          // 调用云函数 积分减一          wx.cloud.callFunction({            // 要调用的云函数名称            name: 'HHPro_functions',            // 传递给云函数的event参数            data: {              function_name: "update_words",              openid: k.data.openid,              last_time: time,              today_chapter: k.data.today_chapter,//今日章节              words_nums:k.data.today_wordnums,//已经背诵单词总数            }          }).then(res => {            console.log("更新数据")            k.setData({              result:true            })            wx.hideLoading()          }).catch(err => {            console.log(err)          })        }        // 不存在        else        {          db.collection('study_user').add({            // data 字段表示需新增的 JSON 数据            data: {             study_openid:k.data.openid,//用户id             first_time:time,//第一次背诵单词的时间             last_time:time,//最后一次背诵的时间             words_nums:k.data.today_wordnums,//已经背诵单词总数             today_chapter:k.data.today_chapter,//今日章节             days:1,//累积天数            }          })            .then(res => {              console.log(res)              k.setData({                result: true              })              wx.hideLoading()            })            .catch(console.error)        }      }      else      {        // 加载需要复习的单词        if (k.data.ishaveload_reviewwords == false) {          k.setData({            words: k.data.review_words,//今天不认识单词集合            words_length: k.data.review_words.length,//第一章节单词数量            word: k.data.review_words[0],//第一章节第一个单词            id_word: 0,//            isshowexplain: false,            ishaveload_reviewwords: true,            isrv: false,          })        }        // 实现 复习单词中的 下一个 功能        else {          console.log(k.data.id_word)          console.log(k.data.review_words.length)          console.log(k.data.review_words)          if (k.data.review_words.length == 1 || k.data.review_words.length == 0) {            console.log("复习完成")            wx.showLoading({              title: '复习完成\(^o^)/~',            })            var time = util.formatTime(new Date())            // 如果记录中存在该用户            if (k.data.isexist === "true")       {                          // 调用云函数 积分减一              wx.cloud.callFunction({                // 要调用的云函数名称                name: 'HHPro_functions',                // 传递给云函数的event参数                data: {                  function_name: "update_words",                  openid: k.data.openid,                  last_time: time,                  today_chapter: k.data.today_chapter,//今日章节                  words_nums: k.data.today_wordnums,//已经背诵单词总数                }              }).then(res => {                console.log("更新数据")                k.setData({                  result: true                })                wx.hideLoading()              }).catch(err => {              })                        }            // 不存在            else {              db.collection('study_user').add({                // data 字段表示需新增的 JSON 数据                data: {                  study_openid: k.data.openid,//用户id                  first_time: time,//第一次背诵单词的时间                  last_time: time,//最后一次背诵的时间                  words_nums: k.data.today_wordnums,//已经背诵单词总数                  today_chapter: k.data.today_chapter,//今日章节                  days: 1,//累积天数                }              })                .then(res => {                  console.log(res)                  k.setData({                    result: true                  })                  wx.hideLoading()                })                .catch(console.error)            }          }          // 依然存在需要复习的单词          else {            // 删除当前单词            k.data.review_words.splice(0, 1)            k.setData({              word: k.data.words[0],              isshowexplain: false,            })          }        }      }    }   },

4、问题反馈

5、收获

实际上,我已经很长时间没有写小程序了,我几乎忘记了很多语法。这几天微有点空了,前段时间我被英语折磨了,所以我一时兴起写了这个模块。我希望以后有时间对其进行改进。

这一次,我认为最有意义的事情是学习动态加载字体。过去,我认为字体不多,只需阅读一下即可。以后,如果该单词仍然是默认字体,那就有点难看了。然后继续百度,寻找方法。大多数方法是将字体库加载到本地或服务器,然后再使用它。在本地加载它不好。字体是几兆字节。 小程序的代码限制为2 MB。 [最近测试,小程序高达16兆字节];部署到服务器不会占用空间,但是延迟很大,用户体验也不佳。考虑到一些因素,我选择了后者,并将其部署在云服务器上。您可以自己使用它。 [错误:某些手机无法加载新字体]

尽管我目前使用词汇记忆模块的经验不是很好,但是我还是一点一点地写下来,我真的很喜欢! !

摘要

“智能单词”模块已启动小程序,感兴趣的朋友可以体验一下[小程序:Haibang Pro,位于“创意之家”中]

它仍处于测试阶段。肯定有很多错误,因此如果有时间,让我们稍后对其进行更新。更高版本将依次添加诸如单词听写和单词错误分析之类的功能。该程序写了一段时间的热情,在很多地方写得不好。开发过程耗时近一下午+一晚,时间跨度为2天。

如果任何朋友发现错误或有任何好的建议,请留言,谢谢♪(・ω・)ノ

分享