由于职业的需要,我每次上课都要点名来确认班上的到课率,因为一边点一边看学生举手效率低下,就上网找了一篇用JavaScript文字转语音的博客,实现了一个在线点名的网页,下面是我的代码:
1 2 3 4 5林小宅的花名册 6 7 20 21 2223 准备好了吗? 242526 34 35 363738 4243 44 414 415
这里比较遗憾的是,当看到有学生没有举手的时候,没有办法暂停下来,待后续的改进,因此我加了一个按钮,当发现学生没有举手的时候就点击“观察人员”,把该学生的名单打印到控制台,点完之后再问没来的具体情况。做这个程序也就花了半个小时,卡在setTimeout()这个函数上。因为我需要实现的效果是每隔2秒就点一个学生的名字,用到了for循环,但是每次for循环的时候并不会停下来去点名,而是一下子把for循环的语句执行完,把每个setTimeout加到待执行队列中,然后全部的setTimeout一下全部执行了,形成的效果就是一个班的54个人的名字同时点出来了。网上有人说可以用立即执行函数,用了之后还是没有达到效果,后来才知道原来是setTimeout不能执行带有参数的函数,必须得用一个匿名函数来封装调用,最后的效果是这样的 :
1 for(var i = 0;i
另外就是音频播放的问题,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;
这是国外大神提供的参考代码,使用了一下,发现很好用呢,就这样,睡觉!!!