Javascript 我必须双击一个按钮才能让函数在js中工作

Javascript 我必须双击一个按钮才能让函数在js中工作,javascript,html,Javascript,Html,我正在尝试实现一个简单的语音到文本,然后将文本到语音作为对初始语音到文本输入的响应 我正在使用另一个开源网站的代码进行语音合成和文本2语音,所以我不完全理解代码 基本上,当我完成输入时,我按下了暂停记录btn,这应该触发myFunction(),但我必须按下按钮两次 (我对js非常陌生,但确实了解一些前端开发(css、html),因此非常感谢您的帮助) /*----------------------------- 语音识别脚本 ------------------------------*

我正在尝试实现一个简单的语音到文本,然后将文本到语音作为对初始语音到文本输入的响应

我正在使用另一个开源网站的代码进行语音合成和文本2语音,所以我不完全理解代码

基本上,当我完成输入时,我按下了暂停记录btn,这应该触发
myFunction()
,但我必须按下按钮两次

(我对js非常陌生,但确实了解一些前端开发(css、html),因此非常感谢您的帮助)

/*-----------------------------
语音识别脚本
------------------------------*/
试一试{
var SpeechRecognition=window.SpeechRecognition | | window.webkitSpeechRecognition;
var recognition=新的SpeechRecognition();
}
捕获(e){
控制台错误(e);
$('.no浏览器支持').show();
$('.app').hide();
}
var noteTextarea=$(“#noteTextarea”);
var指令=$(“#记录指令”);
var notesList=$('ul#notes');
var noteContent='';
//获取以前会话中的所有笔记并显示它们。
var notes=getAllNotes();
renderNotes(注释);
/*-----------------------------
语音识别
------------------------------*/
//如果为false,录音将在沉默几秒钟后停止。
//如果为true,则静默时间较长(约15秒),
//允许我们在用户暂停时继续录制。
识别。连续=正确;
//每次语音APi捕获一行时都会调用此块。
recognition.onresult=函数(事件){
//事件是SpeechRecognitionEvent对象。
//它保存了我们迄今为止捕捉到的所有线条。
//我们只需要现在的。
var current=event.resultIndex;
//获取所说内容的抄本。
var transcript=event.results[current][0]。transcript;
//将当前的成绩单添加到我们的说明内容中。
//手机上有一个奇怪的bug,所有的东西都会重复两次。
//到目前为止还没有正式的解决方案,所以我们不得不处理一个边缘案件。
var mobileRepeatBug=(当前==1&&transcript==event.results[0][0]。transcript);
如果(!mobileRepeatBug){
注内容+=成绩单;
noteTextarea.val(noteContent);
}
};
recognition.onstart=函数(){
说明。文本('语音识别激活。试着对着麦克风说话');
}
recognition.onspeechend=函数(){
text('你沉默了一段时间,所以语音识别自动关闭');
}
recognition.onerror=功能(事件){
如果(event.error=='no speech'){
说明.文本('未检测到语音。请重试');
};
}
/*-----------------------------
应用程序按钮和输入
------------------------------*/
$(“#开始记录btn”)。在('click',函数(e)上{
if(noteContent.length){
noteContent+='';
}
识别。开始();
});
$(“#暂停记录btn”)。在('click',函数(e)上{
识别。停止();
说明。文本(“语音识别暂停”);
});
//将文本区域内的文本与noteContent变量同步。
noteTextarea.on('input',function()){
noteContent=$(this.val();
})
$(“#保存注释btn”)。在('click',函数(e){
识别。停止();
如果(!noteContent.length){
说明.text('无法保存空便笺。请在便笺中添加消息');
}
否则{
//将注释保存到本地存储。
//键是带秒的日期时间,值是注释的内容。
saveNote(新日期().toLocaleString(),noteContent);
//重置变量并更新UI。
noteContent='';
renderNotes(getAllNotes());
noteTextarea.val(“”);
说明.文本('注释已成功保存');
}
})
注释列表上的('click',函数(e){
e、 预防默认值();
var目标=$(e.target);
//听所选的音符。
if(target.hasClass('listen-note')){
var content=target.closest('.note').find('.content').text();
readOutLoud(内容);
}
//删除注释。
if(target.hasClass('delete-note')){
var dateTime=target.sides('.date').text();
删除注释(日期时间);
target.closest('.note').remove();
}
});
/*-----------------------------
语音合成
------------------------------*/
函数readOutLoud(消息){
var speech=新的SpeechSynthesisUtterance();
//设置文本和语音属性。
speech.text=消息;
语音音量=1;
语音速率=1;
speech.pitch=1;
window.speechSynthesis.speak(讲话);
}
/*-----------------------------
辅助函数
------------------------------*/
函数renderNotes(注释){
var html='';
如果(注:长度){
notes.forEach(函数)(note){
html+=`
  • ${note.date}

    ${note.content}

  • `; }); } 否则{ html='
  • 您还没有任何笔记。

  • ; } html(html); } 函数saveNote(日期时间、内容){ setItem('注释-'+日期时间,内容); } 函数getAllNotes(){ var注释=[]; var键; for(var i=0;i
    
    语音控制笔记应用程序
    语音控制笔记应用程序
    

    一款微型应用程序,允许您通过录制语音记录笔记

    很抱歉,您的浏览器不支持Web语音API。尝试在Google Chrome中打开此演示。