Bonsoir,
N'étant pas expert javascript, j'ai besoin de lumière, après avoir passer la journée dessus au travail, ce problème m'obsède, sans comprendre pourquoi le code agit ainsi. l'événement est exécuté à la fin d'une fonction.
je peux avoir plusieurs zone de saisie vocale, chacune a un "bouton" (image de micro)
mon but est de pouvoir stopper la saisie vocal sois via le même bouton, sois en cliquant sur le bouton d'une autre zone (désactivation de la saisie en cours et démarrage de la nouvelle).
Merci d'avance !
HTML (à la base se dernier est généré via Asp.Net)
le code js (je suis en pur javascript), j'ai essayé de séparé en mettant une fonction "stopMic" à part pour voir, mais même résultat.
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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
104
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 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head><title> </title> <script src="js/vocal3.js"></script> <style> body{ } .pbloc{ background-color:lightgray; padding:4px; } .talkbloc{ display:grid; grid-gap:4px; grid-template-columns:1fr; } .talkbloc_header{ display:grid; grid-gap:4px; grid-template-columns:auto 1fr; background-color:burlywood; } .talkbloc_header .icoMic{ cursor:pointer; } .talkbloc_main{ background-color:gainsboro; } .talkbloc_main .iterim{ font-style:italic; } .talkbloc_main .finaltalk { width: 100%; box-sizing: border-box; resize: none; } .talkbloc_footer{ display:grid; grid-gap:4px; grid-template-columns:1fr 1fr; } .talkbloc_footer .l{ } .talkbloc_footer .r{ } </style> </head> <body> <form method="post" action="./Default.aspx" id="form1"> <div id="p1" class="pbloc talkbloc"> <div id="pTalkHeader1" class="talkbloc_header"> <img id="mic1" class="icoMic" src="Images/micOff.png" /> <div class="msg" >informations</div> </div> <div id="pTalkMain1" class="talkbloc_main"> <span id="ltalk_interim1" class="interim"></span> <textarea name="tbTalk" rows="10" cols="20" id="tbTalk" class="finaltalk"> </textarea> </div> <div id="pTalkFooter1" class="talkbloc_footer"> <div id="pfooterl" class="l"> <input type="submit" name="btClearTalk" value="Effacer" id="btClearTalk" /> </div> <div id="Panel1" class="r"> <input type="submit" name="btValidationTalk" value="Valider" id="btValidationTalk" /> </div> </div> </div> <hr />Autre zone<br /> <div id="Panel2" class="pbloc talkbloc"> <div id="Panel3" class="talkbloc_header"> <img id="Image1" class="icoMic" src="Images/micOff.png" /> <div class="msg" >informations</div> </div> <div id="Panel4" class="talkbloc_main"> <span id="Label1" class="interim"></span> <textarea name="TextBox1" rows="10" cols="20" id="TextBox1" class="finaltalk"> </textarea> </div> <div id="Panel5" class="talkbloc_footer"> <div id="Panel6" class="l"> <input type="submit" name="Button1" value="Effacer" id="Button1" /> </div> <div id="Panel7" class="r"> <input type="submit" name="Button2" value="Valider" id="Button2" /> </div> </div> </div> </form> </body> </html>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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 var activeButton; var talkbloc; var msgbloc; var interimbloc; var finalbloc; var recognition; var recognizing = false; var myFunction = function () { if (recognizing && activeButton == this) stopMic(); else if (recognizing && activeButton != this) stopMic(); activeButton = this; talkbloc = this.parentNode.parentNode; msgbloc = talkbloc.querySelector('.msg'); interimbloc = talkbloc.querySelector('.interim'); finalbloc = talkbloc.querySelector('.finaltalk'); recognition.start(); }; function stopMic(){ recognition.stop(); } window.addEventListener("DOMContentLoaded", () => { const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; if (typeof SpeechRecognition !== "undefined") { recognition = new SpeechRecognition(); recognition.continuous = true; recognition.interimResults = true; recognition.onstart = function () { //alert('Start'); recognizing = true; msgbloc.innerHTML = 'A votre écoute'; }; recognition.onend = function () { //alert('End'); recognizing = false; msgbloc.innerHTML = 'l\'écoute est arrêté'; }; recognition.onresult = event => { let interimTranscript = ''; finalbloc.innerHTML = ""; for (const res of event.results) { let transcript = res[0].transcript; if (res.isFinal) { finalbloc.innerHTML += transcript; interimbloc.innerHTML = ''; interimTranscript = ''; } else interimTranscript += transcript; } interimbloc.innerHTML = interimTranscript; }; recognition.onerror = function (event) { alert('error ' + event.error); } } document.querySelectorAll('.icoMic').forEach(item => { item.addEventListener('click', myFunction, false); }) });
Partager