Отзывчивый голосовой плагин 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);
});

Надеюсь, это поможет вам.

ОК, немного погуглив, я нашел ответ

setTimeout внутри $.each()

По сути, вам нужно увеличить таймер.

$.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 секунд, потому что я хочу добавить паузу в каждой строке.

Другие вопросы по тегам