前言
“如果未在测试中测试英语,那就太好了”
嘿,这是可悲的提英语。有时我严重怀疑我不是学习英语的材料。言语被遗忘,被遗忘和被遗忘。考试前,您可以阅读任何单词。进入考试室后:这个词是什么意思?
痛苦的英语学习在头两个月又开始了。开始:背诵单词。首先,请遵循前面的方法并设置每天要记住的单位数,依此类推...记住后,测试您自己的单词数。我很傻,我仍然不记得我记住的话...
总结失败经历,百度:为什么这些单词不能被很好地记住?发现: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天。
如果任何朋友发现错误或有任何好的建议,请留言,谢谢♪(・ω・)ノ