-1

Я пытаюсь сделать хромированное расширение. Сейчас у меня есть эти коды:Play() Вызывает искажение/эхо при воспроизведении звука

<button style="text-align:center; margin-bottom: 5px;" id="myboobutton">DogMeme.avi</button> 
<script type="text/javascript" src="popup.js"></script> 

HTML, который будет кнопка, которая играет звук

Я делаю кнопку и придав ему идентификатор, чтобы он мог вызвать файл Javascript для воспроизведения звука (Я должен сделать это, потому что вы не можете запустить JS на HTML с расширением хромом.) кнопка имеет идентификатор «myboobutton»

function myboo() { 
var heyboosong = new Audio(); 
heyboosong.src = "myboo.mp3"; 
heyboosong.volume=0.5 
heyboosong.play(); 
} 

document.getElementById('myboobutton').addEventListener('click', myboo); 

кнопка вызывает этот popup.js так что он может играть аудиофайл.

У меня есть расширение звуковой дорожки, которое воспроизводит различные песни, которые являются mp3. Когда они играют в расширении хром, они звучат эхо. Когда отдельные звуковые файлы воспроизводятся, они звучат нормально. Я подозреваю, что он выполняет несколько вызовов функции, что приводит к эхо. Я пытаюсь выяснить, как это исправить. (спасибо Makyen за помощь в разъяснении) Я снова проверил, и он все еще это делает.

Кажется, что все звуки mp3 звучат так. Не уверен, что он специфичен для хромовых расширений или нет. Но, похоже, на быстрых компьютерах это не так. Я новичок в кодировании, я только что узнал об этом на прошлой неделе. Огромное спасибо!

Вот распакованное расширение https://drive.google.com/drive/folders/0B3AU3p8wyWK3YXo1YUlGWGg5RGs?usp=sharing

+0

Вы описываете один пользовательский щелчок в результате нескольких вызовов к вашему 'click' обработчика. Это действительно * то, что вы намеревались описать? Это очень отличается от того, что пользователь не нажимал кнопку несколько раз в течение короткого периода времени. Хотя некоторые «решения» могут привести к решению обеих ситуаций, первый (однопользовательский клик, приводящий к нескольким вызовам вашей функции) указывает на другие проблемы/причины. Причина первого будет где-то еще в вашем коде. Чтобы определить, в чем проблема, нам понадобится * complete * [mcve], который дублирует проблему. – Makyen

+0

Я только что научился делать все это на этой неделе, поэтому, пожалуйста, извините меня за это. Извиняюсь. Я думал, что это исправит мою проблему, но, похоже, проблема с самой функцией Play. –

+0

Я изменил его, чтобы быть более ясным сейчас. –

ответ

1

Вы можете отключить кнопку в событии клика и создать функцию setTimeout(), чтобы снова включить кнопку после сертификата в течение периода времени.

Например:

var mybooBtn = document.getElementById('myboobutton'); 

mybooBtn.addEventListener('click', function() {  
    mybooBtn.disabled = true; 
    setTimeout(function() { 
    mybooBtn.disabled = false; 
    }, 1000); 

    // code to play sound goes here 
}); 

Вот скрипку: https://jsfiddle.net/g9wx30qj/

+0

Предположительно, 'play()' является асинхронным. Однако было бы лучше, если бы вы отключили кнопку и сразу установили таймаут при вводе вашей функции, прежде чем выполнять другой код. – Makyen

+0

Да, возможно, в этом случае не может быть никакого значения, но в целом было бы лучше, хороший звонок – thanksd

+0

Есть ли альтернативы тому, что я использовал? Потому что у меня в основном есть дека, наполненная различными песнями, которые я хочу играть. У многих песен есть эхо, но не в фактическом файле MP3, только на моем расширении. Это не каждый раз, когда это происходит. –

0

Вы должны применить концепцию дребезга/дроссельную заслонку. Он предназначен для использования, когда функции требуется задержка между выполнением (т. Е. Вызовы ajax в плагинах типа).

Вы можете использовать простой дроссельной реализации:

var Throttle = function(fn, time) { 
    var flag = true, toId; 
    return function() { 
     if (flag) { 
      var args = arguments; 
      fn.apply(this, args); 
      flag = false; 
      clearTimeout(toId); 
      toId = setTimeout(function() { 
       flag = true; 
      }, time); 
     }   
    } 
}; 

И затем, в вашем коде:

document.getElementById('myboobutton').addEventListener('click', Throttle(myboo,1000)); //1000ms is 1second 
+0

Wow thanks! Он работал, чтобы задержать нажатие кнопки, которое мне нужно, но, похоже, не исправить эхо. Хм, я не могу понять это. –

0

Хорошо, сделать одну вещь, (я показываю решение с помощью JQuery)

$("#myboobutton").click(function(){ 

    $("#myboobutton").css("pointer-events","none"); //click 'll be disabled by this 

    //write code for playing sound; 

    setTimeout(function(){ 

     $("#myboobutton").css("pointer-events","");  //button 'll be clickable again after 1 sec 
    },1000) 
}) 

 Смежные вопросы

  • Нет связанных вопросов^_^