代码拉取完成,页面将自动刷新
##项目背景 最近上三年级儿子的英语老是记不住单词,而他们又在上科学课,老师让练打字。打字和英语学习都没太适合小家伙的实际情况,因此就花了一个周末写下了这个项目。 ##实现功能
暂时实现了上面这些功能,至于题库单词配音、选择装载、错题存储、单词权重等想到的功能,先列在此,要是小家伙能用起来再说吧。
##开发中遇到的问题
##关键源码说明 ###题库的读入与题目队列的初始化
题库为指定目录下所有json文件,使用lodash辅助处理(开始用的underscore);题目队列生成时就随机打乱,为简化后面的操作。
var files = fs.readdirSync('./json');
for(var k = 0; k < files.length; k++){
if(__.endsWith(files[k],".json"))
__.extend(lib, JSON.parse(fs.readFileSync("./json/" + files[k])));
}
//console.dir(lib);
var keys = Object.keys(lib);
for( var i = 0; i < keys.length; i++){
if(problems.indexOf(lib[keys[i]]) < 0){
problems.splice(__.random(problems.length-1),0,lib[keys[i]]);
}
}
//console.dir(problems);
###keyUp事件处理
打字练习库是a-z的一个键与值同等的对象,输入一个字母时,若与题目相等,则响应,开始我用的onkeydown,此时从界面取值是取不到的,所以写成了下面这个模式,想来改用onkeyup后是不是不用这样麻烦了,有空再测试一下。
function keyUp(e) {
var ev= window.event||e;
if (ev.keyCode == 13 && $("#inputInfo").val().trim().length > 0) {
answerCommit();
}else if(ev.keyCode == $("#problem").val().toUpperCase().charCodeAt()){
answerCommit(ev.keyCode);
}
}
###答案提交处理
模拟了函数重载,根据有无参数,分别对打字练习和单词两种方式进行数据预处理。
function answerCommit(){
var answer,problem;
if(arguments.length == 0){
answer = lib[$("#inputInfo").val().trim()];
problem = $("#problem").val();
}
else if(arguments.length == 1){
answer = arguments[0];
problem = $("#problem").val().toUpperCase().charCodeAt();
}
if(answer==problem){
##源代码
源码托管在开源中国,有兴趣的同学可以过去拍砖,呵呵。
https://git.oschina.net/zhoutk/ilearn.git
##运行方法 ###全局安装nw.js
npm install nw -g
###克隆源代码
git clone https://git.oschina.net/zhoutk/ilearn.git
###安装依赖库
cd ilearn & npm install
###运行项目
nw
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。