【发布时间】:2012-02-01 19:06:20
【问题描述】:
我一直在使用 jPlayer 和 jQuery 的 .fadeIn/.fadeOut 将一些文本与音频同步。它按预期工作,使用这些 if 语句:
var currentTime = Math.floor(event.jPlayer.status.currentTime)
if (currentTime > 1){
$("#slide1").fadeIn("fast");
} else if (currentTime < 1){
$("#slide1").fadeOut("fast");
}
if (currentTime >= 9 && currentTime < 49){
$("#slide2").fadeIn("fast");
} else if (currentTime < 9){
$("#slide2").fadeOut("fast");
}
等等。这将在适当的时间显示/隐藏 div 并允许擦洗。我改编的代码来自here。我是一个懂一点编程的设计师,所以我的技术不是很好但是我懂的很多。我正在寻找一种更有效的方法来做到这一点,而不是复制/粘贴 if 语句,因为会有很多。可能是所有进出时间的数组?我不知道该怎么做。
最好的情况是有一个时间控制预建 div 的 xml 列表(我认为无论如何)。关于如何做的任何想法?
感谢您的宝贵时间, S
更新
好的,我已经取得了一些进展,但是 XML/循环出现了问题。我已将内容添加到 XML 并让它动态生成 div。这是xml:
<?xml version="1.0" encoding="utf-8" ?>
<Slides>
<Slide id="#slide1" in="1" out="9999" content="Implications"></Slide>
<Slide id="#slide2" in="9" out="49" content="Implications have the form"></Slide>
<Slide id="#slide3" in="11" out="49" content="If A is true, then B is true."></Slide>
</Slides>
这是我创建 div(隐藏)的代码
<script>
var mySlides = [];
$.ajax({
type: "GET",
url: "xml.xml",
dataType: "xml",
success: parseXml
});
function parseXml(xml)
{
$(xml).find("Slide").each(function() {
$("#slides").append("<div class=\"starthidden\" id=" + $(this).attr("id") + ">" + $(this).attr("content") + "</div>");
});
var $slides = xml.find('Slide');
for (var i = 0, len = $slides.length; i < len; i++) {
mySlides[mySlides.length] = {
in : $slides.eq(i).attr('in'),
out : $slides.eq(i).attr('out')
};
}
}
$("#audio").bind($.jPlayer.event.timeupdate, function(event) {
var currentTime = Math.floor(event.jPlayer.status.currentTime)
for (var i = 0; i < len; i++) {
if (currentTime >= mySlides[i].in && currentTime < mySlides[i].out) {
$(mySlides[i].id).fadeIn("fast");
} else if (currentTime < mySlides[i].in) {
$(mySlides[i].id).fadeOut("fast");
}
}
});
</script>
我想我真的不知道从这里到哪里让 div 现在显示/隐藏?同样,我还必须想办法关闭许多 div,因为 slides 实际上是线条,而不是完整的幻灯片,所以我需要清除它们阶段(如果您在 XML 中看到,它将是 49 秒)。任何人都可以帮忙吗?非常感谢。 S
【问题讨论】:
标签: java jquery audio sync jplayer