林小宅的点名册

由于职业的需要,我每次上课都要点名来确认班上的到课率,因为一边点一边看学生举手效率低下,就上网找了一篇用JavaScript文字转语音的博客,实现了一个在线点名的网页,下面是我的代码:

  1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2 <html>
  3     <head>
  4         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5         <title>林小宅的花名册</title>
  6         
  7         <style type="text/css">
  8             #namename{
  9                 line-height: 500px;
 10                 height: 500px;
 11                 text-align: center;
 12                 font-size: 100px;
 13             }
 14             .oo{
 15                 width: 290px;
 16                 height: 20px;
 17                 margin: 0px auto;
 18             }
 19         </style>
 20     </head>
 21     <body>
 22         <div id="namename">
 23                 准备好了吗?
 24         </div>
 25         <div class="oo">
 26             <select name="" id="kj">
 27                 <option value="1" >前端1班</option>
 28                 <option value="2">前端2班</option>
 29                 <option value="3">前端3班</option>
 30                 <option value="4">前端4班</option>
 31                 <option value="5">大数据</option>
 32                 <option value="6">C语言</option>
 33             </select>
 34             <button onclick="clickme()">开始点名</button>    
 35             <button onclick="patient()">观察人员</button>    
 36         </div>
 37         <div id="bdtts_div_id">
 38             <audio id="tts_autio_id" autoplay="autoplay">
 39                 <source id="tts_source_id" src="http://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&spd=5&text=开始点名啦" type="audio/mpeg">
 40                 <embed id="tts_embed_id" height="0" width="0" src="">
 41             </audio>
 42         </div>
 43 
 44         <script type="text/javascript"> 
 45 
 46         //前段一班
 47         var fontEnd_class1 = "前端1班_郑剀鸿_"
 48                         +"林彬_"
 49                         +"张伟彬_"
 50                         +"林庆祥_"
 51                         +"谭明智_"
 52                         +"罗旭强_"
 53                         +"蔡其成_"
 54                         +"李瑞林_"
 55                         +"潘粤湘_"
 56                         +"房霖_"
 57                         +"赖展凯_"
 58                         +"吴宗荣_"
 59                         +"杨丹娜_"
 60                         +"黄显权_"
 61                         +"邓富成_"
 62                         +"谢嘉炜_"
 63                         +"杨丹凤_"
 64                         +"黎炜松_"
 65                         +"谢金航_"
 66                         +"龙伟乐_"
 67                         +"陈浩贤_"
 68                         +"王雨婷_"
 69                         +"黄俊威_"
 70                         +"梁达斌_"
 71                         +"陈泽凯_"
 72                         +"邝梓豪_"
 73                         +"邱文威_"
 74                         +"陈熙才_"
 75                         +"梁关伟_"
 76                         +"陈家恒_"
 77                         +"黄超铧_"
 78                         +"赖桂玲_"
 79                         +"吴胜睿_"
 80                         +"李永成_"
 81                         +"刘耿涛_"
 82                         +"张家毓_"
 83                         +"蔡志豪_"
 84                         +"周浩东_"
 85                         +"吴军龙_"
 86                         +"鄞沛远_"
 87                         +"李上钦_"
 88                         +"邓锦鹏_"
 89                         +"陈俊安_"
 90                         +"陈治_"
 91                         +"梁玉婷_"
 92                         +"郭金川_"
 93                         +"陈健欣_"
 94                         +"李泽伟_"
 95                         +"林俊宇_"
 96                         +"陈剑锋_"
 97                         +"黄钢祥_"
 98                         +"廖家灼_"
 99                         +"何富铖_"
100                         +"许俊伟_"
101                         +"王子泓_"
102                         +"吴泽峰_";
103         //前端2班
104         var fontEnd_class2 ="前端2班_孙唯晟_"
105                             +"文浩旭_"
106                             +"庄昊庭_"
107                             +"廖伟健_"
108                             +"聂大森_"
109                             +"罗家敬_"
110                             +"陈晓生_"
111                             +"李晔韬_"
112                             +"卜文博_"
113                             +"彭旭成_"
114                             +"梁婉婷_"
115                             +"辛梓瀚_"
116                             +"李思_"
117                             +"林乐祺_"
118                             +"黄才略_"
119                             +"关瑜沛_"
120                             +"梁沛立_"
121                             +"梁绍鹏_"
122                             +"植湛深_"
123                             +"高建塘_"
124                             +"颜卓越_"
125                             +"罗浩延_"
126                             +"陈昱鸿_"
127                             +"周宇杰_"
128                             +"余钎华_"
129                             +"谈钰锋_"
130                             +"卢炯铭_"
131                             +"吴键东_"
132                             +"张琦_"
133                             +"梁佰华_"
134                             +"冼耀琪_"
135                             +"苏世宇_"
136                             +"刘家敏_"
137                             +"范显超_"
138                             +"严朝朗_"
139                             +"林逸新_"
140                             +"李文龙_"
141                             +"蔡东威_"
142                             +"谭源潮_"
143                             +"杨嘉鑫_"
144                             +"刘浩威_"
145                             +"杨柏丽_"
146                             +"冯卓鹏_"
147                             +"伍桑_"
148                             +"谭建岚_"
149                             +"梁浩轩_"
150                             +"钟所愿_"
151                             +"蒋敏维_"
152                             +"张海鹏_"
153                             +"梁文杰_"
154                             +"叶育丰_"
155                             +"陈吉周_"
156                             +"魏钦宏_"
157                             +"韦雄哲_"
158                             +"王远旭_"
159                             +"庄晓鑫_点名结束";
160         //前段3班
161         var fontEnd_class3 = "前端3班_郑浩佳_"+
162                             "汤岳文_"+
163                             "黄泽岚_"+
164                             "林泽儒_"+
165                             "李佳川_"+
166                             "郭宇亮_"+
167                             "陈婉丽_"+
168                             "林泽鑫_"+
169                             "董志胜_"+
170                             "刘冬冬_"+
171                             "卢欣苗_"+
172                             "谢根甫_"+
173                             "刘钧铿_"+
174                             "蔡烁_"+
175                             "张思敏_"+
176                             "边建_"+
177                             "林桂鑫_"+
178                             "林晓鹏_"+
179                             "欧楚瑜_"+
180                             "苏信泉_"+
181                             "张志创_"+
182                             "陈泽博_"+
183                             "黄仁海_"+
184                             "杨观霖_"+
185                             "林浩锋_"+
186                             "陈彦旭_"+
187                             "廖世跃_"+
188                             "洪晓东_"+
189                             "刘丽敏_"+
190                             "施木伟_"+
191                             "刘悦川_"+
192                             "李雄杰_"+
193                             "叶成浩_"+
194                             "杨泽轩_"+
195                             "吴伟阳_"+
196                             "崔嘉承_"+
197                             "陈振群_"+
198                             "周仕颖_"+
199                             "朱家浩_"+
200                             "周志源_"+
201                             "黄泽浩_"+
202                             "林于聪_"+
203                             "冯时帆_"+
204                             "文汉鹏_"+
205                             "江俊霖_"+
206                             "谢俊威_"+
207                             "杨建林_"+
208                             "胡洛彬_"+
209                             "陈恺_"+
210                             "谢晓漫_"+
211                             "林煜_"+
212                             "陈洁莹_"+
213                             "陈日冠_"+
214                             "邓锦华_"+
215                             "梁钊柯_"+
216                             "辛子慧_点名结束";
217         //前端4班
218         var fontEnd_class4 ="前端4班_吴炳麟_"+
219                             "高伟崇_"+
220                             "蔡晋昇_"+
221                             "吴宇轩_"+
222                             "黄慧燕_"+
223                             "黄海琦_"+
224                             "张荣_"+
225                             "叶羽枫_"+
226                             "余秋材_"+
227                             "王伟杰_"+
228                             "黎航铭_"+
229                             "何伟业_"+
230                             "杨永裕_"+
231                             "黄钦豪_"+
232                             "张俊_"+
233                             "温伟韬_"+
234                             "刘凯钢_"+
235                             "郑峻珩_"+
236                             "陈小楠_"+
237                             "江卓峰_"+
238                             "洪浩彬_"+
239                             "陆科良_"+
240                             "刘作林_"+
241                             "黄开筑_"+
242                             "林祈宏_"+
243                             "柯铭_"+
244                             "陈华宏_"+
245                             "詹凡_"+
246                             "朱倍立_"+
247                             "钟东煜_"+
248                             "余华龙_"+
249                             "龙沛元_"+
250                             "许铭全_"+
251                             "翁聪颖_"+
252                             "肖东江_"+
253                             "辛怀睿_"+
254                             "吴勉锐_"+
255                             "林添信_"+
256                             "余志宪_"+
257                             "林洁淮_"+
258                             "郑家宝_"+
259                             "邓伟业_"+
260                             "何涛_"+
261                             "刘蔼瑞_"+
262                             "梁宇航_"+
263                             "范浩林_"+
264                             "陈俊源_点名结束";
265         //C语言4班
266         var context1 = "C语言4班_冼明朗_刘宇鸿_"+
267                         "刘春雄_"
268                         +"刘晓聪_"
269                         +"刘粤豪_"
270                         +"吴业朋_"
271                         +"吴剑洋_"
272                         +"吴德昊_"
273                         +"吴桂洲_"
274                         +"周泽锴_"
275                         +"唐进义_"
276                         +"庞洪滔_"
277                         +"廖辉健_"
278                         +"张兆山_"
279                         +"徐海祥_"
280                         +"朱勇腾_"
281                         +"朱桂涛_"
282                         +"朱毅龙_"
283                         +"李喜廷_"
284                         +"李堪立_"
285                         +"李新茹_"
286                         +"李永聪_"
287                         +"杨超文_"
288                         +"林宇轩_"
289                         +"林志权_"
290                         +"林泽航_"
291                         +"林琳_"
292                         +"柯雅量_"
293                         +"温俊豪_"
294                         +"潘华锋_"
295                         +"潘家炬_"
296                         +"王奕敏_"
297                         +"白昌煜_"
298                         +"练庆钦_"
299                         +"罗思维_"
300                         +"翁俊源_"
301                         +"胡建斌_"
302                         +"冼明朗_"
303                         +"苏浩洋_"
304                         +"范德浩_"
305                         +"蓝文壕_"
306                         +"蔡翠婷_"
307                         +"谢银光_"
308                         +"邱利_"
309                         +"郭珊珊_"
310                         +"陈冠宇_"
311                         +"陈泳衔_"
312                         +"马伟东_"
313                         +"黄建成_"
314                         +"黄文伟_"
315                         +"黄膨钒_"
316                         +"黄锐_"
317                         +"黄梓丰_"
318                         +"苏西波_"
319                         +"任旺_"
320                         +"孙润东_点名结束";
321         //大数据班
322         var bigData_class = "大数据班_彭绪政_"+
323                             "廖炎彬_"+
324                             "冯嘉泳_"+
325                             "谢俊钦_"+
326                             "林泽彬_"+
327                             "陈森华_"+
328                             "雷涛_"+
329                             "宋子洋_"+
330                             "杜伟杰_"+
331                             "薛启炫_"+
332                             "吴希豚_"+
333                             "黄广准_"+
334                             "陈泓哲_"+
335                             "杨文豪_"+
336                             "韩俊铭_"+
337                             "方铭_"+
338                             "刘嘉楠_"+
339                             "陈泽锐_"+
340                             "张大桥_"+
341                             "黄志聪_"+
342                             "陈敏清_"+
343                             "蔡镓锷_"+
344                             "黄嘉泉_"+
345                             "蔡创洲_"+
346                             "谭俊杰_"+
347                             "陈广金_"+
348                             "许坤威_"+
349                             "梁朗明_"+
350                             "吴桂平_"+
351                             "丘文源_"+
352                             "徐鸿宇_"+
353                             "陈梓萼_"+
354                             "李伟元_"+
355                             "钟盟阳_"+
356                             "赵伯鋆_"+
357                             "陈嘉铭_"+
358                             "利锦成_"+
359                             "林楚炯_"+
360                             "叶伟杰_"+
361                             "欧阳一鸣_"+
362                             "肖哲华_"+
363                             "曾剑涛_"+
364                             "蔡铠文_"+
365                             "林宏伟_"+
366                             "苏乙航_"+
367                             "黄庆余_"+
368                             "肖俊杰_"+
369                             "黄峻权_点名结束";
370 
371         function doTTS(ttsText){            
372             var ttsDiv = document.getElementById('bdtts_div_id');
373             var ttsAudio = document.getElementById('tts_autio_id');
374             ttsDiv.removeChild(ttsAudio);
375             var au1 = '<audio id="tts_autio_id" autoplay="autoplay">';
376             var sss = '<source id="tts_source_id" src="http://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&spd=5&text='+ttsText+'" type="audio/mpeg">';
377             var eee = '<embed id="tts_embed_id" height="0" width="0" src="">';
378             var au2 = '</audio>';
379             ttsDiv.innerHTML += au1 + sss + eee + au2;
380             
381             var media = document.getElementById("tts_autio_id");
382             const playPromise = media.play();
383             if (playPromise !== null){
384                 playPromise.catch(() => { media.play(); })
385             }
386             document.getElementById("namename").innerHTML = ttsText;
387         }
388 
389         var isKeepOn = true;
390         var whereStop = 0;
391         var nameList = [fontEnd_class1,fontEnd_class2,fontEnd_class3,fontEnd_class4,bigData_class,context1];
392         var arr;
393         var blackName = "";
394         function clickme(){
395             arr = nameList[document.getElementById("kj").selectedIndex].split("_");
396             for(var i = 0;i<arr.length;i++){
397                 //解决作用域的问题,以及setTimeout不能调用带参数的函数,只能在匿名函数中封装调用
398                 (function(name,j){
399                     setTimeout(function(){doTTS(name)},j*2500);
400                 })(arr[i],i);
401             }
402         }
403 
404         function patient(){
405             var name = document.getElementById("namename").innerHTML+" | ";
406             blackName +=name;
407             console.log(blackName);
408         }
409 
410 
411 
412         
413         </script>
414     </body>
415 </html>
View Code

这里比较遗憾的是,当看到有学生没有举手的时候,没有办法暂停下来,待后续的改进,因此我加了一个按钮,当发现学生没有举手的时候就点击“观察人员”,把该学生的名单打印到控制台,点完之后再问没来的具体情况。做这个程序也就花了半个小时,卡在setTimeout()这个函数上。因为我需要实现的效果是每隔2秒就点一个学生的名字,用到了for循环,但是每次for循环的时候并不会停下来去点名,而是一下子把for循环的语句执行完,把每个setTimeout加到待执行队列中,然后全部的setTimeout一下全部执行了,形成的效果就是一个班的54个人的名字同时点出来了。网上有人说可以用立即执行函数,用了之后还是没有达到效果,后来才知道原来是setTimeout不能执行带有参数的函数,必须得用一个匿名函数来封装调用,最后的效果是这样的 :

1 for(var i = 0;i<arr.length;i++){
2  //解决作用域的问题,以及setTimeout不能调用带参数的函数,只能在匿名函数中封装调用
3   (function(name,j){
4      setTimeout(function(){doTTS(name)},j*2500);
5   })(arr[i],i);
6 }

另外就是音频播放的问题,media.play()和media.pause()的含义,意思大概明白了,但是很难言语,这里就不说了,只说解决的方法:

1 var media = document.getElementById("tts_autio_id");
2             const playPromise = media.play();
3             if (playPromise !== null){
4                 playPromise.catch(() => { media.play(); })
5             }
6             document.getElementById("namename").innerHTML = ttsText;

这是国外大神提供的参考代码,使用了一下,发现很好用呢,就这样,睡觉!!!

原文地址:https://www.cnblogs.com/baby-lijun/p/9775515.html