• js实现的文章输入检查与测速。


    在群里聊天,一个群友求助。说要实现 文章对比输入,出错了标红,正确的标绿。 同时还需要统计正确率。

    我一开始以为很容易,结果搞了半天。最后折腾出来了。

    这里的思路如下:利用js的数组。将文章和输入的内容,都转为数组,一对一进行比对。找到错误的,就修改对应的数组元素。加入Html标签。

    代码如下:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>Examples</title>
    <meta name="description" content="">
    <meta name="keywords" content="">
    <link href="" rel="stylesheet">
    <script type="text/javascript" src="jquery.js"></script>
    
    <style type="text/css">
        
        #articleArea{
            width: 100%;
            height: 150px;
            border: 1px solid #000;
            display:none;
    
        }
        #userinput{
            width: 100%;
            height: 150px;
            border: 1px solid #000;
    
    
        }
    
    
    
    
    
    
    </style>
    </head>
    <body>
    
        <p id="article">鲁迅同时又是20世纪世界文化巨人之一。他创造了内外两面,都和世界的时代思潮合流,而又并未梏亡中国的民族性并具有独特的个人风格的“现今想要参与世界上的事业的中国人”的文学。他与同时期的世界杰出的思想家和文学家一样,在关注本民族的同时,也在关注着人类共同面临的问题,并做出了自己的独特贡献
        </p>
    
        <textarea id="articleArea" >
    
            
        </textarea>
    
    
        <textarea id="userinput">
        </textarea>
    
        <p id="info"></p>
    
    
    
        
    
    
        <script type="text/javascript">
    
            Date.prototype.format = function(format){ 
                var o = { 
        "M+" : this.getMonth()+1, //month 
        "d+" : this.getDate(), //day 
        "h+" : this.getHours(), //hour 
        "m+" : this.getMinutes(), //minute 
        "s+" : this.getSeconds(), //second 
        "q+" : Math.floor((this.getMonth()+3)/3), //quarter 
        "S" : this.getMilliseconds() //millisecond 
        } 
    
        if(/(y+)/.test(format)) { 
            format = format.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length)); 
        } 
    
        for(var k in o) { 
            if(new RegExp("("+ k +")").test(format)) { 
                format = format.replace(RegExp.$1, RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length)); 
            } 
        } 
        return format; 
        } 
    
        //获取p标签的内容
        
        var articleStr = $("#article").text(); //全局变量
         articleStr = articleStr.replace(/(^s*)|(s*$)/g,'');
        var count = 0;//发现的错字数量。
    
        var start = false; //开始计时。
        var startTime = 0;//开始的时间
        var startTimeStr = "";//开始时间的字符串
    
    
    
    
    
        function checkError () {
    
    
            
            //获取输入的字符串
            var userInputstr = $("#userinput").val();
            //去掉空白
            userInputstr.replace(/(^s*)|(s*$)/g,'');
    
            if(userInputstr.length<=1){
                return;
            }
    
            //开始计时
            if(!start){
                start = true;
                startTime = new Date().getTime();
                startTimeStr = new Date().format("yyyy-MM-dd hh:mm:ss");
            }
    
    
    
            //转换数组
            var userInputarray = new Array();
    
            for (var i = 0; i < userInputstr.length; i++) {
            
                userInputarray[i] = userInputstr.charAt(i);
            };
    
            //用户输入的字符串长度
            var userInputlength = userInputarray.length;
            
            var articleArray = new Array();
    
            for (var i = 0; i < articleStr.length; i++) {
            
                articleArray[i] = articleStr.charAt(i);
            };
    
            
    
            //新建数组保存检查后的结果
            var resultArray = new Array();
            resultArray = articleArray.slice(0); //复制一份
    
            //2个数组进行对比
            for (var i = 0; i < userInputarray.length; i++) {
                if(userInputarray[i] != articleArray[i]){
                    //发现不同。
                    count++; //错误字数量增加一个
                    //标注错误的字符串。
                    resultArray[i] = "<span style='background-color:red;'>"+articleArray[i]+"</span>";
                    
    
    
                }else{
                    resultArray[i] = "<span style='background-color:#00DD00;'>"+articleArray[i]+"</span>";
    
                }
    
            };
    
            //计算输入速度。
            var endTime = new Date().getTime();
            var spendTime =  parseInt((endTime - startTime)/1000);
    
            var spendMinute = Math.floor(spendTime/60);
            if(spendMinute<=0){
                spendMinute =1;
            }
            var speed =Math.floor(userInputlength / spendMinute);
    
            
    
            //输出内容
            var result = resultArray.join("");
            var info = "统计信息:";
            info += "开始时间:"+startTimeStr;
            
    
            info+="花费时间:"+spendTime+"";
    
            
            info +="每分钟输入:"+speed;
    
            info +="已经输入:"+userInputlength;
            info +="正确字数:"+ (userInputlength-count);
            info +="正确率:"+Math.round((userInputlength-count) /userInputlength *100)+"%";
    
    
    
            $("#article").html(result);
            
    
            $("#info").html(info);
    
            //清空
            count ="";
            
        
            
        }
    
        var timename=setInterval("checkError();",1000);
        
    
    
        </script>
        
    </body>
    </html>

    主要的js代码:

            Date.prototype.format = function(format){ 
                var o = { 
        "M+" : this.getMonth()+1, //month 
        "d+" : this.getDate(), //day 
        "h+" : this.getHours(), //hour 
        "m+" : this.getMinutes(), //minute 
        "s+" : this.getSeconds(), //second 
        "q+" : Math.floor((this.getMonth()+3)/3), //quarter 
        "S" : this.getMilliseconds() //millisecond 
        } 
    
        if(/(y+)/.test(format)) { 
            format = format.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length)); 
        } 
    
        for(var k in o) { 
            if(new RegExp("("+ k +")").test(format)) { 
                format = format.replace(RegExp.$1, RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length)); 
            } 
        } 
        return format; 
        } 
    
        //获取p标签的内容
        
        var articleStr = $("#article").text(); //全局变量
         articleStr = articleStr.replace(/(^s*)|(s*$)/g,'');
        var count = 0;//发现的错字数量。
    
        var start = false; //开始计时。
        var startTime = 0;//开始的时间
        var startTimeStr = "";//开始时间的字符串
    
    
    
    
    
        function checkError () {
    
    
            
            //获取输入的字符串
            var userInputstr = $("#userinput").val();
            //去掉空白
            userInputstr.replace(/(^s*)|(s*$)/g,'');
    
            if(userInputstr.length<=1){
                return;
            }
    
            //开始计时
            if(!start){
                start = true;
                startTime = new Date().getTime();
                startTimeStr = new Date().format("yyyy-MM-dd hh:mm:ss");
            }
    
    
    
            //转换数组
            var userInputarray = new Array();
    
            for (var i = 0; i < userInputstr.length; i++) {
            
                userInputarray[i] = userInputstr.charAt(i);
            };
    
            //用户输入的字符串长度
            var userInputlength = userInputarray.length;
            
            var articleArray = new Array();
    
            for (var i = 0; i < articleStr.length; i++) {
            
                articleArray[i] = articleStr.charAt(i);
            };
    
            
    
            //新建数组保存检查后的结果
            var resultArray = new Array();
            resultArray = articleArray.slice(0); //复制一份
    
            //2个数组进行对比
            for (var i = 0; i < userInputarray.length; i++) {
                if(userInputarray[i] != articleArray[i]){
                    //发现不同。
                    count++; //错误字数量增加一个
                    //标注错误的字符串。
                    resultArray[i] = "<span style='background-color:red;'>"+articleArray[i]+"</span>";
                    
    
    
                }else{
                    resultArray[i] = "<span style='background-color:#00DD00;'>"+articleArray[i]+"</span>";
    
                }
    
            };
    
            //计算输入速度。
            var endTime = new Date().getTime();
            var spendTime =  parseInt((endTime - startTime)/1000);
    
            var spendMinute = Math.floor(spendTime/60);
            if(spendMinute<=0){
                spendMinute =1;
            }
            var speed =Math.floor(userInputlength / spendMinute);
    
            
    
            //输出内容
            var result = resultArray.join("");
            var info = "统计信息:";
            info += "开始时间:"+startTimeStr;
            
    
            info+="花费时间:"+spendTime+"秒";
    
            
            info +="每分钟输入:"+speed;
    
            info +="已经输入:"+userInputlength;
            info +="正确字数:"+ (userInputlength-count);
            info +="正确率:"+Math.round((userInputlength-count) /userInputlength *100)+"%";
    
    
    
            $("#article").html(result);
            
    
            $("#info").html(info);
    
            //清空
            count ="";
            
        
            
        }
    
        var timename=setInterval("checkError();",1000);
        

     最后的效果:

  • 相关阅读:
    解决pgAdmin4启动失败方法
    X86汇编——计算斐波那契数列程序(详细注释和流程图说明)
    unity3d学习笔记(一) 第一人称视角实现和倒计时实现
    项目element-ui checkbox里面获取选中项 实现批量删除 修改
    //统计报表-供水量统计主列表分页查询 Element-ui的分页插件
    导出excel的功能效果实现
    echarts的基本使用以及如何使用官方实例的方法
    vue.js移动端app:初始配置
    使用雪碧图
    iconFont字体图标
  • 原文地址:https://www.cnblogs.com/jsRunner/p/4322974.html
Copyright © 2020-2023  润新知