JS实现计时器计算阅读速度


前言

大一的时应一个老师的要求,帮他的网站的英语文章阅读板块写一个计算阅读速度的功能。那时一开始觉得很复杂,其实老师的需求很简单,做完这个小项目后,我就开始慢慢掉入前端这个坑了。


一、需求与分析

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 + "&#160;WPM";//WPM是每分钟多少个单词
		}
		else if(n2>1)//避免当Stop键被重复点击时,输出一个非正常值,所以直接输出一个旧值
		{
			if(FixedSpeed==0) {alert("错误操作,没有计时,请按“Reset”键重新开始");}
			document.getElementById("speed").innerHTML=FixedSpeed + "&#160;WPM";
	    }
		ss=1;m=h=s=0;     //时间归零
		document.getElementById("Start").innerHTML="Reset";//重新改变左边按键的功能
			
	}
	

2.页面效果

在这里插入图片描述


总结

这算是大学第一个写出来有真正去应用的程序,快两年了,现在看起来那时的要求真简单,代码写的也很业余。不过我也不想去修改它的模样,毕竟那是最初的样子。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值