- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了这个小型音频播放器,它播放随机的前奏、歌曲的中间部分,然后是随机的尾声。现在它被硬编码为 1 首歌曲。每首歌有 3 个前奏、一个中段和 3 个尾奏。我希望能够有一个随机选择的歌曲列表(比如从数组中随机选择),因此脚本将选择一首歌曲并相应地更改脚本(前奏和结尾以及中间部分)。我想过不同的方法来做到这一点,但我不想为脚本中的每首歌都设置大量数组。我将如何着手设计这样的系统?在 www.saradio.tk/dev.html 进行演示(音频计时只能在 Chrome-ACTIVE-TAB AFAIK 中正常工作)
代码:
<body onload="checkdif(), loadintro(), loadoutro()">
<audio id="intro" src="" controls preload autoplay></audio>
<audio id="mid" src="radio/Barracuda-mid.ogg" controls preload></audio>
<audio id="outro" src="" controls preload></audio>
<br>
<br>
<button onclick="resetradio()">RESET</button> <span id="timeleft"> n/a </span>
<script>
var intros = [
"radio/Barracuda-intro1.ogg",
"radio/Barracuda-intro2.ogg",
"radio/Barracuda-intro3.ogg"];
var outros = [
"radio/Barracuda-outro1.ogg",
"radio/Barracuda-outro2.ogg",
"radio/Barracuda-outro3.ogg"];
function loadintro() {
document.getElementById("intro").src = intros[Math.floor(Math.random() * intros.length)];
document.getElementById("intro").load();
document.getElementById("intro").play();
}
function loadoutro() {
document.getElementById("outro").src = outros[Math.floor(Math.random() * outros.length)];
document.getElementById("outro").load();
}
x = document.getElementById('intro');
y = document.getElementById('mid');
done = false;
done2 = false;
function checkdif() {
if (done) return;
setTimeout('checkdif()', 5);
document.getElementById('timeleft').innerHTML = x.duration - x.currentTime;
if (x.duration - x.currentTime <= 0.09) {
document.getElementById('mid').play();
done = true;
checkdif2();
}
}
function checkdif2() {
if (done2) return;
setTimeout('checkdif2()', 5);
document.getElementById('timeleft').innerHTML = y.duration - y.currentTime;
if (y.duration - y.currentTime <= 0.09) {
document.getElementById('outro').play();
done2 = true;
}
}
function resetradio() {
done = false;
done2 = false;
document.getElementById('mid').pause();
document.getElementById('mid').currentTime = 0;
loadintro();
loadoutro();
checkdif();
}
document.getElementById("outro").addEventListener('ended', resetradio, false)
</script>
</body>
PS:我还考虑过设计系统,以便它从列表中删除刚刚播放的歌曲,这样它就不会播放同一首歌曲,直到它循环遍历所有其他可能的歌曲。所以它会从一组歌曲中选择,当它选择“歌曲 x”时,它会从数组中删除“歌曲 x”以进行下一次随机选择。只是一个想法...
如果您查看源代码并查看控制台,您会看到它从数组中随机抽取一首歌曲,然后从数组中删除该歌曲。这样,在播放完所有歌曲之前,它不会重复播放一首歌曲。一旦循环到达最后一首歌曲,数组将恢复到原始状态。
最佳答案
即使您说不想拥有大量数组,只要每首歌曲都有前奏列表和尾声列表,您就必须以某种方式“了解”它们。您基本上有 2 个选择:
对于 1. ,您的数据结构可能如下所示:
var intro_suffix = '-intro';
var outro_suffix = '-outro';
var extension = '.ogg';
var songs = [
{
base_name: "radio/Barracuda"
, num_intro: 3
, num_outros: 3
},
{
base_name: "radio/SomeOtherSong"
, num_intro: 3
, num_outros: 3
},
];
一旦您选择了一首歌曲,您就可以从中得出前奏、主曲和尾奏的文件名。例如:
var song = songs[0];
var intro_url = song.name
+ intro_suffix
+ (1 + Math.floor(Math.random() * song.num_intros))
+ extension;
var song_url = song.name + extension;
var outro_url = song.name
+ outro_suffix
+ (1 + Math.floor(Math.random() * song.num_outros))
+ extension;
对于 2,您的数据结构必须是显式的:
var songs = [
{
url: "radio/Barracuda.ogg"
, intros: ["radio/Barracuda-intro1.ogg", "radio/Barracuda-intro2.ogg", "radio/Barracuda-intro3.ogg"]
, outros: ["radio/Barracuda-outtro1.ogg", "radio/Barracuda-outro2.ogg", "radio/Barracuda-outro3.ogg"]
},
{
url: "radio/SomeOtherSong.ogg"
, intros: ["radio/foo.ogg", "radio/bar.ogg", "radio/baz.ogg"]
, outros: ["radio/meh.ogg", "radio/fuuuuu.ogg", "radio/yo.ogg"]
},
];
然后您将变量导出为:
var song = songs[0];
var intro_url = song.intros[Math.floor(Math.random() * song.intros.length)];
var song_url = song.url;
var outro_url = song.outros[Math.floor(Math.random() * song.outros.length)];
2. 的一个“优点”是您可以随意修改文件
关于javascript - 转换此 JavaScript 以处理多首歌曲?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15194983/
我正在尝试将一个字符串逐个字符地复制到另一个字符串中。目的不是复制整个字符串,而是复制其中的一部分(我稍后会为此做一些条件......) 但我不知道如何使用迭代器。 你能帮帮我吗? std::stri
我想将 void 指针转换为结构引用。 结构的最小示例: #include "Interface.h" class Foo { public: Foo() : mAddress((uint
这有点烦人:我有一个 div,它从窗口的左上角开始过渡,即使它位于文档的其他任何位置。我试过 usign -webkit-transform-origin 但没有成功,也许我用错了。有人可以帮助我吗?
假设,如果将 CSS3 转换/转换/动画分配给 DOM 元素,我是否可以检测到该过程的状态? 我想这样做的原因是因为我正在寻找类似过渡链的东西,例如,在前一个过渡之后运行一个过渡。 最佳答案 我在 h
最近我遇到了“不稳定”屏幕,这很可能是由 CSS 转换引起的。事实上,它只发生在 Chrome 浏览器 上(可能还有 Safari,因为一些人也报告了它)。知道如何让它看起来光滑吗?此外,您可能会注意
我正在开发一个简单的 slider ,它使用 CSS 过渡来为幻灯片设置动画。我用一些基本样式和一些 javascript 创建了一支笔 here .注意:由于 Codepen 使用 Prefixfr
我正在使用以下代码返回 IList: public IList FindCodesByCountry(string country) { var query =
如何设计像这样的操作: 计算 转化 翻译 例如:从“EUR”转换为“CNY”金额“100”。 这是 /convert?from=EUR&to=CNY&amount=100 RESTful 吗? 最佳答
我使用 jquery 组合了一个图像滚动器,如下所示 function rotateImages(whichHolder, start) { var images = $('#' +which
如何使用 CSS (-moz-transform) 更改一个如下所示的 div: 最佳答案 你可以看看Mozilla Developer Center .甚至还有例子。 但是,在我看来,您的具体示例不
我需要帮助我正在尝试在选中和未选中的汉堡菜单上实现动画。我能够为菜单设置动画,但我不知道如何在转换为 0 时为左菜单动画设置动画 &__menu { transform: translateX(
我正在为字典格式之间的转换而苦苦挣扎:我正在尝试将下面的项目数组转换为下面的结果数组。本质上是通过在项目第一个元素中查找重复项,然后仅在第一个参数不同时才将文件添加到结果集中。 var items:[
如果我有两个定义相同的结构,那么在它们之间进行转换的最佳方式是什么? struct A { int i; float f; }; struct B { int i; float f; }; void
我编写了一个 javascript 代码,可以将视口(viewport)从一个链接滑动到另一个链接。基本上一切正常,你怎么能在那里看到http://jsfiddle.net/DruwJ/8/ 我现在的
我需要将文件上传到 meteor ,对其进行一些图像处理(必要时进行图像转换,从图像生成缩略图),然后将其存储在外部图像存储服务器(s3)中。这应该尽可能快。 您对 nodejs 图像处理库有什么建议
刚开始接触KDB+,有一些问题很难从Q for Mortals中得到。 说,这里 http://code.kx.com/wiki/JB:QforMortals2/casting_and_enumera
我在这里的一个项目中使用 JSF 1.2 和 IceFaces 1.8。 我有一个页面,它基本上是一大堆浮点数字段的大编辑网格。这是通过 inputText 实现的页面上的字段指向具有原始值的值对象
ScnMatrix4 是一个 4x4 矩阵。我的问题是什么矩阵行对应于位置(ScnVector3),旋转(ScnVector4),比例(ScnVector3)。第 4 行是空的吗? 编辑: 我玩弄了
恐怕我是 Scala 新手: 我正在尝试根据一些简单的逻辑将 Map 转换为新 Map: val postVals = Map("test" -> "testing1", "test2" -> "te
输入: This is sample 1 This is sample 2 输出: ~COLOR~[Green]This is sample 1~COLOR~[Red]This is sam
我是一名优秀的程序员,十分优秀!