前言
大一的时应一个老师的要求,帮他的网站的英语文章阅读板块写一个计算阅读速度的功能。那时一开始觉得很复杂,其实老师的需求很简单,做完这个小项目后,我就开始慢慢掉入前端这个坑了。
一、需求与分析
1.需求
用户阅读时点击计时器开始计时,可暂停计时、继续计时。
用户阅读完时可点击计时器停止,另外有重置功能。
在用户点击计时停止后计算出阅读速度,并显示。
每篇文章的字数在页面上有显示。
2.分析
实现一个计时功能,用户可交互开始、暂停、继续、停止、重置。
页面上有文章的字数,可直接获取每篇文章的字数。
因此,阅读速度=字数/计时。
二、计时器的实现
1.包含的功能
开始、暂停、继续、停止、重置
2.代码实现
<!DOCTYPE html>
<html>
<head>
<title>计时器</title>
<meta http-equiv="Content-Type" content="text/html" charset="utf-8">
</head>
<bady>
<input id="start" name="s" type="button" value="开始" onclick="startclock()">
<input name="s" type="button" value="停止" onclick="stopclock()">
<input name="showtime" style="color:#ff0000; width:200px;" id="showtime" type="text" value="00:00:00">
<script language="javascript">
var se, t, m = 0, h = 0, s = 0, ss = 1, n1=0, n2=0;
function settime(a){
if(a<10)
a = "0"+a;
return a;
}
function second(){
if((ss%100)==0){s+=1;ss=1;}
if(s>0 && (s%60)==0){m+=1;s=0;}
if(m>0 && (m%60)==0){h+=1;m=0;}
// t = h+"时"+m+"分"+s+"秒"+ss+"毫秒";
var showh = settime(h);
var showm = settime(m);
var shows = settime(s);
t = showh+":"+showm+":"+shows+"."+ss;
document.getElementById("showtime").value=t;
ss+=1;
}
function startclock(){
var y=1; n1+=y;
if(n2==0){
if(n1%2==1)
{
se=setInterval("second()", 10);
document.getElementById("start").value="暂停";
}
else if(n1%2==0)
{
clearInterval(se);
document.getElementById("start").value="继续";
}
}else if(n2>0){
document.getElementById("start").value="开始";
document.getElementById("showtime").value="00:00:00";
n2 = 0;//有关记录归零,避免对后续操作产生影响
n1 = 0;
}
}
function pauseclock(){ clearInterval(se);}
function stopclock(){
var y=1; n2+=y;//获取的点击数
clearInterval(se); ss=1;m=h=s=0;
document.getElementById("start").value="重置";//重新改变左边按键的功能
}
</script>
</bady>
</html>
3.功能效果
三、实现阅读速度计算
前面的分析可以知道,计时器才是核心任务,在实现计时器的基础上,阅读速度很轻易就可以得到。
1.完整的功能逻辑代码
HTML
<html lang="en-US">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes" content="target-densitydpi=device-dpi" />
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Intelligence</title>
<link rel="stylesheet" href="styles.css" />
<script src="timer2.js"></script>
</head>
<body class="zp">
<div class="hintBar">
<p style="text-indent: 0px">
<span id="Start" style="display: inline-block; width: 80px; margin-left: 1em; cursor: hand" name="s" onclick="startclock()">Start</span>
<span name="s" style="display: inline-block; width: 40px; cursor: hand" onclick="stopclock()">Stop</span>
<span name="showtime" style="display: inline-block; width: 80px; float: right; margin-right: 1em" id="showtime" type="text" >00:00:00</span>
</p>
</div>
<table border="0" height="100%" width="100%">
<tr>
<td height="100%" width="100%">
<div class="avDiv">
<iframe style="width: 100%; height: 100%" frameBorder="0" src="4_541.html"></iframe>
</div>
</td>
</tr>
<tr>
<td>
<p class="wordCount" >Word Count: <span id="wordCount">220</span></p>
</td>
</tr>
<tr>
<td>
<div class="myBoxShadow">
<p class="z" style="margin-left: 1em">Your Speed: <span id="speed" style=""></span></p>
</div>
</td>
</tr>
</table>
</body>
</html>
JS
var se, t, m = 0, h = 0, s = 0, ss = 1, n1 = 0, n2 = 0;
var FixedSpeed;//定义一个固定速度用来记录速度
function settime(a){
if(a<10)
a = "0"+a;
return a;
}
function second(){ //计时函数
if((ss%100)==0){s+=1;ss=1;}
if(s>0 && (s%60)==0){m+=1;s=0;}
if(m>0 && (m%60)==0){h+=1;m=0;}
// t = h+"时"+m+"分"+s+"秒"+ss+"毫秒";
var showh = settime(h);
var showm = settime(m);
var shows = settime(s);
t = showh+":"+showm+":"+shows;
document.getElementById("showtime").innerHTML=t;
ss+=1;
}
function startclock(){
var x=1; n1+=x;//让n1获取左边按键的点击数
if(n2==0)
{
if(n1%2==1)//单数计时
{
se=setInterval("second()", 10);//每10毫秒调用一次second()函数
document.getElementById("Start").innerHTML="Pause";
}
else if(n1%2==0)//双数暂停
{
clearInterval(se);
document.getElementById("Start").innerHTML="Continue";
}
}
else if(n2>0)//当Stop键被点击或者连续点击时,Reset功能成立
{
document.getElementById("Start").innerHTML="Start";
document.getElementById("showtime").innerHTML="00:00:00";
document.getElementById("speed").innerHTML="";
n2 = 0;//有关记录归零,避免对后续操作产生影响
n1 = 0;
}
}
//function pauseclock(){ clearInterval(se);}
function stopclock(){ //结束和计算速度的函数
var y=1; n2+=y;//让n2获取右边按键的点击数
clearInterval(se);
if(n2==1)//输出速度
{
if(h==0 && m==0 && s==0 && ss==1)//特殊情况,没有计时就直接点击Stop键(ss是从1开始的,不是0)
{
var speed=0;
FixedSpeed = speed;//记录速度
alert("错误操作,没有计时,请按“Reset”键重新开始");
}
else//正常情况
{
var wordCount = document.getElementById("wordCount").innerHTML;
var speed = Math.round(wordCount/(h*60+m+s/60+ss/6000));
FixedSpeed = speed;//记录速度
}
document.getElementById("speed").innerHTML=speed + " WPM";//WPM是每分钟多少个单词
}
else if(n2>1)//避免当Stop键被重复点击时,输出一个非正常值,所以直接输出一个旧值
{
if(FixedSpeed==0) {alert("错误操作,没有计时,请按“Reset”键重新开始");}
document.getElementById("speed").innerHTML=FixedSpeed + " WPM";
}
ss=1;m=h=s=0; //时间归零
document.getElementById("Start").innerHTML="Reset";//重新改变左边按键的功能
}
2.页面效果
总结
这算是大学第一个写出来有真正去应用的程序,快两年了,现在看起来那时的要求真简单,代码写的也很业余。不过我也不想去修改它的模样,毕竟那是最初的样子。