Отзывчивый голосовой плагин jquery не работает внутри цикла
Я пытаюсь заставить отзывчивый голос зачитывать каждое предложение, и между каждым чтением должен быть промежуток в 1 минуту.
function read(){
responsiveVoice.speak('قلم','Arabic Female');
}
var a = [1,2,3];
$(a).each( function(){
setTimeout(function(){ read(); }, 1000);
});
в настоящее время он воспроизводится только один раз, а в двух других циклах появляется ошибка
Uncaught (в обещании) DOMException: запрос play() был прерван вызовом pause().
я также не могу заставить его читать что-либо переданное ему динамически
2 ответа
Может быть проблема в том, что вы использовали .each()
метод не правильно, потому что $(a)
попробуйте выбрать селектор, но не массив.
Из документа jQuery.each():
jQuery.each (массив, обратный вызов) где
array: Type: Array - Массив для перебора.
callback: Type: Function (Integer indexInArray, Object value) - функция, которая будет выполняться для каждого объекта.
Итак, попробуйте это:
$.each( a, function(){
setTimeout(function(){
read();
}, 1000);
});
Надеюсь, это поможет вам.
ОК, немного погуглив, я нашел ответ
По сути, вам нужно увеличить таймер.
$.each( a, function(i){
setTimeout(function(){
read();
}, i*1000);
});
Итак, первый цикл составляет 1 секунду. Цикл 2 будет 2 секунды.
Вот мой пример кода:
setTimeout(function(){
console.log(text)
responsiveVoice.speak(text, 'Swedish Female', {rate: 0.7}, {pitch: 2});
}, i*6000);
Каждая речь занимает около 5 секунд. Я использую 6 секунд, потому что я хочу добавить паузу в каждой строке.