2016-09-22 103 views
0

我会尽量说明这一点,但基本上我想要做的是为我的网站创建一个即时消息服务,由一群人私下使用。我有发送和接收下来拍拍,但我似乎无法找到通知声音的工作。Javascript - 播放变量变化的声音

我希望在收到新消息时播放通知声音。我一直在摆弄它大约45分钟,我试着四处寻找解决方案,但我似乎无法找到任何有用的。

这里是我的javascript:

function update() { 
    var xmlhttp=new XMLHttpRequest(); 
    var username = "<?php echo $ugt ?>"; 
    var output = ""; 
    var number = 0; 
    var messages = msgarea.childElementCount/2; 

    xmlhttp.onreadystatechange=function() { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
      var response = xmlhttp.responseText.split("\n") 
      var rl = response.length 
      var item = ""; 
      for (var i = 0; i < rl; i++) { 
       item = response[i].split("\\") 
       if (item[1] != undefined) { 
        if (item[0] == username) { 
         output += "<div class=\"msgsentby ext\"><div class='imgprop'></div></div><div class=\"msgc\"> <div class=\"msg msgfrom\">" + item[1] + "</div> <div class=\"msgarr msgarrfrom\"></div> </div>"; 
        } else { 
         output += "<div class=\"msgsentby\"><img src='https://api.lspd-fibo.com/avatar/?gt=" + item[0] + "'></div> <div class=\"msgc\"> <div class=\"msg\">" + item[1] + "</div> <div class=\"msgarr\"></div></div>"; 
         number = msgarea.childElementCount/2; 
        } 
       } 
      } 
      msgarea.innerHTML = output; 

      if (messages < number) { 
       audio.play(); 

       setTimeout(function() { 
        messages = msgarea.childElementCount/2; 
       }, 500); 
      } 

      msgarea.innerHTML += "number: " + number; 
      msgarea.innerHTML += " messages: " + messages; 
     } 

    } 
    xmlhttp.open("GET","get-messages.php?username=" + username,true); 
    xmlhttp.send(); 
} 

function sendmsg() { 
    var message = msginput.value; 
    var delay = 1500; 
    if (message != "") { 
     var username = "<?php echo $ugt ?>"; 
     var xmlhttp=new XMLHttpRequest(); 
     xmlhttp.onreadystatechange=function() { 
      if (xmlhttp.readyState==4 && xmlhttp.status==200) {} 
     } 

     message = escapehtml(message) 
     msgarea.innerHTML += "<div class=\"msgc\" style=\"margin-bottom: 30px;\"> <div class=\"msg msgfrom sending\">" + message + "</div> <div class=\"msgarr msgarrfrom\"></div> <div class=\"msgsentby msgsentbyfrom\">Sending...</div> </div>"; 
     msginput.value = ""; 

     var objDiv = document.getElementById("msg-area"); 
     objDiv.scrollTop = objDiv.scrollHeight; 

     xmlhttp.open("GET","update-messages.php?username=" + username + "&message=" + message,true); 
     xmlhttp.send(); 

     setTimeout(function() { 
      var objDiv = document.getElementById("msg-area"); 
      objDiv.scrollTop = objDiv.scrollHeight; 
     }, delay); 

     xmlhttp.onreadystatechange=function() { 
      if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
       var objDiv = document.getElementById("msg-area"); 
       objDiv.scrollTop = objDiv.scrollHeight; 
      } 
     } 
    } 
} 

我道歉,如果这是一个有点凌乱,但这是我的工作。我很欣赏

// EDIT 1

就个人而言,我在想什么可以工作,是计算所有消息的网页时就装的任何援助,任何人都可以提前:)提供,每时间脚本刷新和检测到一个新的数字,发出声音..我试图让这种特殊的方法工作,也没有用,但这可能是由于我在这个过程中缺乏知识。

// EDIT 2

我已经编辑我的JavaScript与我一直试图在此期间的工作。

+1

尝试设置'变种数= 0;',如果你将要处理它作为一个整数... –

+0

你要使用纯JS或使用HTML5的音频API的 – MatejMecka

+0

似乎@ Aelliott1485不是也可以工作,每次脚本刷新时我都会听到通知声音。 – Bradley

回答

0

我已经采取了你的代码,动了几变量声明并切换到使用Array.prototype.forEach()所以我们没有处理手动递增索引......这对我的作品......

function update() { 
 
    var xmlhttp=new XMLHttpRequest(); 
 
    var username = "Fred"; 
 
    var output = ""; 
 
    var number = 0; 
 
    var oldVar; //initialize here instead of after forEach 
 

 
    xmlhttp.onreadystatechange=function() { 
 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
 
      var response = xmlhttp.responseText.split("\n") 
 
      var rl = response.length 
 
      var item; \t //just declare array here but don't need to set value 
 
      response.forEach(function(responseLine,index) { 
 
       item = responseLine.split("\\") 
 
       if (item[1] != undefined) { 
 
        number++; 
 
        if (item[0] == username) { 
 
         output += "<div class=\"msgsentby\"><div class='imgprop'></div></div><div class=\"msgc\"> <div class=\"msg msgfrom\">" + item[1] + "</div> <div class=\"msgarr msgarrfrom\"></div> </div>"; 
 
        } else { 
 
         output += "<div class=\"msgsentby\"><img src='https://api.lspd-fibo.com/avatar/?gt=" + item[0] + "'></div> <div class=\"msgc\"> <div class=\"msg\">" + item[1] + "</div> <div class=\"msgarr\"></div></div>"; 
 
        } 
 
       } 
 
      }); 
 
      if (oldVar != number) { 
 
       var audio = new Audio('notification.mp3'); 
 
       audio.play(); 
 
      } 
 
      msgarea.innerHTML = output; 
 
      //removed var keyword here so we don't re-declare it each time 
 
      oldVar = number; 
 
     } 
 

 
    } 
 
    xmlhttp.open("GET","get-messages.php?username=" + username,true); 
 
    xmlhttp.send(); 
 
}

+0

没有工作..只是垃圾邮件通知声音 – Bradley

+0

'没有工作'这是否意味着消息没有显示,还是别的?你有没有尝试过调试(例如用'debugger;'和/或其他控制台日志来查看在停止之前它有多远? –

+0

这就是我现在正在做的事情。消息通过完美的罚款..它只是通知通知声音不断地尽快脚本运行 – Bradley