Javascript 突出显示文本的文本到语音

Javascript 突出显示文本的文本到语音,javascript,Javascript,对于一份调查问卷,部分是为不识字的人准备的,我需要一个文本到语音的应用程序。出于可用性原因,文本应在突出显示(“标记”)时阅读。 在研究如何做到这一点的不同方法时,我发现了下面的工具,它正好可以做到这一点。由于某些原因,它不会起作用。 我想在问卷调查软件SoSci上使用它,所以这可能是一个问题(有人有经验吗?) 我将感谢任何提示,我所缺少的,但也非常欢迎关于如何解决问题的其他方法 祝福 <script> function getSelectionText() {

对于一份调查问卷,部分是为不识字的人准备的,我需要一个文本到语音的应用程序。出于可用性原因,文本应在突出显示(“标记”)时阅读。 在研究如何做到这一点的不同方法时,我发现了下面的工具,它正好可以做到这一点。由于某些原因,它不会起作用。 我想在问卷调查软件SoSci上使用它,所以这可能是一个问题(有人有经验吗?)

我将感谢任何提示,我所缺少的,但也非常欢迎关于如何解决问题的其他方法

祝福

<script>        
function getSelectionText() {
        var text = "";
        if (window.getSelection) {
            text = window.getSelection().toString();
        // for Internet Explorer 8 and below. For Blogger, you should use &amp;&amp; instead of &&.
        } else if (document.selection && document.selection.type != "Control") { 
            text = document.selection.createRange().text;
        }
        return text;
    }
    $(document).ready(function (){ // when the document has completed loading
       $(document).mouseup(function (e){ // attach the mouseup event for all div and pre tags
          setTimeout(function() { // When clicking on a highlighted area, the value stays highlighted until after the mouseup event, and would therefore stil be captured by getSelection. This micro-timeout solves the issue. 
             responsiveVoice.cancel(); // stop anything currently being spoken
             responsiveVoice.speak(getSelectionText()); //speak the text as returned by getSelectionText
          }, 1);
       });
    });
    </script>

函数getSelectionText(){
var text=“”;
if(window.getSelection){
text=window.getSelection().toString();
//对于Internet Explorer 8及以下版本。对于Blogger,您应该使用&;&;而不是&。
}else if(document.selection&&document.selection.type!=“Control”){
text=document.selection.createRange().text;
}
返回文本;
}
$(document).ready(函数(){//当文档完成加载时)
$(document).mouseup(函数(e){//为所有div和pre标记附加mouseup事件
setTimeout(function(){//当单击高亮显示的区域时,该值会一直高亮显示,直到mouseup事件之后,因此getSelection仍会捕获该值。此微超时解决了此问题。
responsiveVoice.cancel();//停止当前正在讲话的任何内容
responsiveVoice.speak(getSelectionText());//说出getSelectionText返回的文本
}, 1);
});
});

它不能一直工作的原因是您正在使用的文本2语音库。有时似乎无法加载

解释 好的,我提到你学习如何使用,你说你觉得作为一个程序员,你没有足够的能力来实现一个利用这个特性的应用程序。在MDN上可以找到的文档和我将要向您展示的演示之间,您应该能够实现这样一个特性,而不会有太多麻烦

我建议您尽量避免使用具有非常简单功能的库,即充当本机技术的包装器,这会妨碍您学习底层技术。我的意思是,无论如何,把它们作为一个起点,但我建议你以后学习本机方法,这将有助于你作为开发人员的进步,至少我是这么认为的

演示 有了这个演示,我几乎复制并粘贴了可以在MDN上找到的代码

我的代码与MDN上的代码的唯一区别在于,我使用的是
“use strict;”
和一个立即调用的函数。如果是这样的话,我建议你多读一些关于和

//一个简单的iLife函数。
(功能(){
“严格”;//为了练习。
if(演讲合成的类型==='undefined')
返回;
//一些配置文件。。。
var voiceSelect=document.getElementById(“voiceSelect”);
var myPhrase='Hello World!';
var=[];
//这本质上类似于jQuery的$.ready。
var ready=函数(回调){
var d=文档,s=d.readyState;
//已加载的DOMContentLoaded被激发
如果(s==“完成”| | s==“加载”| | s==“交互”){
回调();
}否则{
如果(d.addEventListener){
d、 addEventListener(“DOMContentLoaded”,回调,false);
}否则{
d、 attachEvent(“onDOMContentLoaded”,回调);
}
}
};
//这是一个显示所有可能语音选项的功能。
函数populateVoiceList(){
voices=speechSynthesis.getVoices();
for(var i=0;i



测试。。。测试。。。一二三。。。测试


我喜欢大屁股,我不能撒谎,你们其他兄弟不能否认

您是否考虑过尝试以更本土的方式使用?我已经读过。不幸的是,我的知识还不足以编写程序。因此,我需要一个以前是,现在是的人