事件结束后重新加载页面
Reloading a page after an event has finished
EDIT : This is now solved, thanks very much everyone who replied. I
will come back here and vote up replies when I have enough reputation
to do so :)
我一直在想办法在 onclick 音频文件播放完毕后如何重新加载页面。
我制作了一个静态页面,其中一张图片覆盖了整个 window。我在一个名为 "audio"
的文件夹中有一堆愚蠢的音频文件
我有一些 php 代码可以在音频文件夹中随机选择一个 mp3 并根据要求回显其文件名:
$files = glob('audio/*.mp3'); // get all .mp3 files in the music directory
$fname = $files[array_rand($files)]; // get a random file name
//echo $fname; // uncomment to echo random file name
稍后在页面中 JavaScript 检测到鼠标点击时播放文件,并将随机生成的文件名注入代码:
<script>
function play(){
var audio = document.getElementById("audio");
audio.play();
}
</script>
<input type="image" SRC="eye.gif" value="PLAY" onclick="play();setTimeout('history.go(0);',6000);l">
<audio id="audio" src="<?php echo $fname; ?>" ></audio>
目前,我有几个 onclick 事件正在发生,但是我对这个不满意:
setTimeout('history.go(0);',6000);l
超时是一种解决方法,我打赌音频文件会在达到时间阈值后在刷新开始之前完成播放。
我真正想要的是某种检测文件何时在浏览器中播放完毕,然后自动刷新页面的方法。
(我正在刷新页面以便再次生成随机音频文件。)
我希望我的 post 是有道理的!
在此站点上的专家将不胜感激!
亲切的问候,
您可以在 canplaythrough
事件上重新加载页面的回调 fn:
audio.addEventListener('canplaythrough', isAppLoaded, false);
我重新看了你的问题,你好像只是想随机循环不同的音轨,所以不需要刷新。在这种情况下,没有理由回叫 PHP,只需提供 JavaScript 所有文件链接,让它完成工作即可。
<script>
var songs = <?php echo json_encode(glob('audio/*.mp3')); ?>;
function play() {
var audio = document.getElementById("audio");
audio.addEventListener('ended', function(e) {
audio.src = songs[Math.floor(Math.random()*songs.length)];
audio.load();
}, false);
audio.play();
}
</script>
<input type="image" SRC="eye.gif" value="PLAY" onclick="play();">
<audio id="audio" src="<?php echo $fname; ?>" ></audio>
旧答案:
您可以将以下听众附加到您的音频中:
var audio = document.getElementById("audio");
audio.addEventListener('ended', function(e) {
history.go(0);
}, false);
audio.play();
而不是重新加载页面。我建议在 play() 函数中使用回调来调用第二个函数,第二个函数可以使用 Ajax 从 php 脚本中获取另一个响应并将其放入 src,然后调用再次播放功能
我现在正在使用我的手机 phone,所以写一个示例有点困难,但如果没有人跳上它,我稍后会试一试。
希望对您有所帮助 如果您不确定 Ajax 看看 w3schools,他们的教程非常好
编辑:
这是一个合适的脚本,未经测试,因此请注意语法,但即使它不太有效,它也应该使您朝着正确的方向前进
function playRandomAudio() {
// get random audio
$.ajax({url: "randomaudio.php", success: function(result){
$("#audio").attr("src",result);
}});
// play it
$("#audio").play();
}
$(function() {
// document onload, play audio
playRandomAudio();
});
$("#audio").bind('ended', function(){
// done playing, do it again
playRandomAudio();
});
randomaudio.php
<?php
$files = glob('audio/*.mp3'); // get all .mp3 files in the music directory
$fname = $files[array_rand($files)]; // get a random file name
echo $fname; // uncomment to echo random file name
为了提高稳健性,我鼓励 try/catch 围绕 php 的 3 行,让你 return 一个很好的失败而不是担心潜在的废话通过或无效可能在 javascript 端产生意外结果的文件。然后 ajax 调用可能有一个失败部分,可以执行一些其他任务,例如警报
别忘了包括 jquery https://code.jquery.com/
如果您没有使用这些 http://www.w3schools.com/jquery/jquery_ajax_intro.asp
的经验,请进一步阅读 jquery/ajax
EDIT : This is now solved, thanks very much everyone who replied. I will come back here and vote up replies when I have enough reputation to do so :)
我一直在想办法在 onclick 音频文件播放完毕后如何重新加载页面。
我制作了一个静态页面,其中一张图片覆盖了整个 window。我在一个名为 "audio"
的文件夹中有一堆愚蠢的音频文件我有一些 php 代码可以在音频文件夹中随机选择一个 mp3 并根据要求回显其文件名:
$files = glob('audio/*.mp3'); // get all .mp3 files in the music directory
$fname = $files[array_rand($files)]; // get a random file name
//echo $fname; // uncomment to echo random file name
稍后在页面中 JavaScript 检测到鼠标点击时播放文件,并将随机生成的文件名注入代码:
<script>
function play(){
var audio = document.getElementById("audio");
audio.play();
}
</script>
<input type="image" SRC="eye.gif" value="PLAY" onclick="play();setTimeout('history.go(0);',6000);l">
<audio id="audio" src="<?php echo $fname; ?>" ></audio>
目前,我有几个 onclick 事件正在发生,但是我对这个不满意:
setTimeout('history.go(0);',6000);l
超时是一种解决方法,我打赌音频文件会在达到时间阈值后在刷新开始之前完成播放。
我真正想要的是某种检测文件何时在浏览器中播放完毕,然后自动刷新页面的方法。
(我正在刷新页面以便再次生成随机音频文件。)
我希望我的 post 是有道理的!
在此站点上的专家将不胜感激!
亲切的问候,
您可以在 canplaythrough
事件上重新加载页面的回调 fn:
audio.addEventListener('canplaythrough', isAppLoaded, false);
我重新看了你的问题,你好像只是想随机循环不同的音轨,所以不需要刷新。在这种情况下,没有理由回叫 PHP,只需提供 JavaScript 所有文件链接,让它完成工作即可。
<script>
var songs = <?php echo json_encode(glob('audio/*.mp3')); ?>;
function play() {
var audio = document.getElementById("audio");
audio.addEventListener('ended', function(e) {
audio.src = songs[Math.floor(Math.random()*songs.length)];
audio.load();
}, false);
audio.play();
}
</script>
<input type="image" SRC="eye.gif" value="PLAY" onclick="play();">
<audio id="audio" src="<?php echo $fname; ?>" ></audio>
旧答案:
您可以将以下听众附加到您的音频中:
var audio = document.getElementById("audio");
audio.addEventListener('ended', function(e) {
history.go(0);
}, false);
audio.play();
而不是重新加载页面。我建议在 play() 函数中使用回调来调用第二个函数,第二个函数可以使用 Ajax 从 php 脚本中获取另一个响应并将其放入 src,然后调用再次播放功能
我现在正在使用我的手机 phone,所以写一个示例有点困难,但如果没有人跳上它,我稍后会试一试。
希望对您有所帮助 如果您不确定 Ajax 看看 w3schools,他们的教程非常好
编辑: 这是一个合适的脚本,未经测试,因此请注意语法,但即使它不太有效,它也应该使您朝着正确的方向前进
function playRandomAudio() {
// get random audio
$.ajax({url: "randomaudio.php", success: function(result){
$("#audio").attr("src",result);
}});
// play it
$("#audio").play();
}
$(function() {
// document onload, play audio
playRandomAudio();
});
$("#audio").bind('ended', function(){
// done playing, do it again
playRandomAudio();
});
randomaudio.php
<?php
$files = glob('audio/*.mp3'); // get all .mp3 files in the music directory
$fname = $files[array_rand($files)]; // get a random file name
echo $fname; // uncomment to echo random file name
为了提高稳健性,我鼓励 try/catch 围绕 php 的 3 行,让你 return 一个很好的失败而不是担心潜在的废话通过或无效可能在 javascript 端产生意外结果的文件。然后 ajax 调用可能有一个失败部分,可以执行一些其他任务,例如警报
别忘了包括 jquery https://code.jquery.com/
如果您没有使用这些 http://www.w3schools.com/jquery/jquery_ajax_intro.asp
的经验,请进一步阅读 jquery/ajax