在功能成功时播放声音,并且不要重叠声音(多个功能)

时间:2019-10-11 23:05:56

标签: javascript jquery html audio

我想在功能成功时播放警报声音,我正在运行多个类似的脚本

我尝试过的所有内容都会循环播放或在页面加载或重叠时播放 因为我所有脚本都使用相同的声音,所以我需要以某种方式停止播放,然后从头开始播放下一个...我真的可以在此上使用一些帮助

<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script 
 src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"> 
 type="text/javascript" charset="utf-8"></script>
 <script>
   var audio = new Audio("audiosrc.mp3");
  $(document).ready(function(){
  sendRequest();
  function sendRequest(){
  $.ajax({
    url: "vineri.php",
    success: 
      function(data){

       $('#listposts').html(data); 

    },
    function playAudio() {

    audio.pause();
    audio.currentTime = 0;

    audio.play();
    },
    complete: function() {

   setTimeout(sendRequest, 5000); 
   }
   });
  };
   });

</script>
</head>
<body>
<div id="listposts"> </div>
</body>

正如我所说的,我有许多类似的脚本,并且div正在页面上运行,我如何在complete:功能上为所有脚本播放audio.mp3,而不会重叠或在页面加载时播放。 我无法使用按钮,声音需要在ajax运行时播放,在脚本停止时停止播放

1 个答案:

答案 0 :(得分:0)

可能有两件事:

  1. 您可能没有等待音频加载。
  2. 您尚未暂停并重置音频。

解决方法如下:

//at the start of your script
var audio = new Audio("audiosrc.mp3");
var loadStatus = 0;
$( window ).on( "load", function() {
setTimeout(function(){loadStatus=1}, 2000);
})
function playAudio() {
   if (loadStatus === 1) {//check page wasn’t just loaded
   //make sure audio is reset
   audio.pause();
   audio.currentTime = 0;
   //play
   audio.play();
   }
}

此外,如果尚未通过用户事件初始化safari,则不允许您运行声音。参见this question