У меня есть веб-приложение с svg. Когда пользователь проводит пальцем по экрану, даются разные описания в зависимости от того, в какой части svg он находится. Однако я хочу отменить текущее произнесение речи, если пользователь перейдет на другой путь SVG. В настоящее время API синтеза речи будет продолжать считывать описание, даже если пользователь находится на другом пути. Причина if ('speechSynthesis' in window)
в том, что остальная часть моего скрипта будет работать в Firefox.
Вот моя функция синтеза речи:
if ('speechSynthesis' in window) {
var msg = new SpeechSynthesisUtterance();
var voices = window.speechSynthesis.getVoices();
msg.voice = 'native';
msg.rate = 2;
}
....
function vibStart(event) {
event.preventDefault();
e = document.elementFromPoint(event.touches.item(0).clientX, event.touches.item(0).clientY);
for (var i = 0; i<paths.length +1; i += 1) {
if (e.id == "path" + i) {
if ('speechSynthesis' in window) {
msg.text = document.getElementById("desc" + i).firstChild.data;
speechSynthesis.speak(msg);
msg.addEventListener('end', function () {
speechSynthesis.cancel();
});
}
}
}
}
Есть ли способ сохранить речевой текст как переменную, а затем проверить его по e.id и, если они совпадают, отменить речевое высказывание?
ИЗМЕНИТЬ
Я пытался добавить speechSynthesis.cancel();
перед msg.text
, но это тоже не решает проблему. Хотя он отменяет высказывание, когда пользователь переходит на новый путь, он не сразу начинает новое высказывание.
msg
, например. - person Kerstomaat   schedule 09.08.2016