如何在不丢失当前状态的情况下使用jquery显示/隐藏YouTubevideo?

我正在构建一个jquery ajax页面,其中显示了youtubevideo列表。 我在页面上有两个视图(列表和video),它们构建为LI元素,向左浮动,在UL元素内。 我这样构建它是因为视图之间的过渡是使用水平幻灯片效果完成的,我发现使用列表可以在视图高度不同时正确地垂直调整页面大小。

从列表视图中选择video时,我首先看看它是否存在于DOM中。 如果是,我只需将其移动到video视图。 如果没有,我创建一个新的DIV并将video加载到其中。 将video移动到video视图后,我将video视图滑动到位。 当转换回列表视图时,我将video移动到隐藏的“帮助器”div中,这样我就可以将它保存在DOM中。

我遇到的问题是,每当我将YouTube移动到video视图或从video视图移动时,它都会重置。 因此,即使video已完全加载(和/或部分播放),移动后,播放器也会重置为0并且必须完全重新加载。 我正在使用appendTo()来移动它。

这是一个简化的jsfiddle测试:

http://jsfiddle.net/UPhek/3/

您将在我的测试代码中看到我可以显示/隐藏播放器并保持状态。 但是当我使用.appendTo()将videoDIV移动到辅助DIV时,我失去了播放器的状态。 我设置了3个测试……您可以通过更改whichTest全局变量来更改测试。

尝试更改video的可见性:

visiblity: hidden 

http://jsfiddle.net/UPhek/4/

Tou可以将此项目附加到“video视图”一侧(如果尚未加载),然后更改它的可见性,最好使用css类。


您可以将此function与YouTube API结合使用,并使用javascript停止/启动video:

http://code.google.com/apis/youtube/js_api_reference.html

 var video = document.getElementById('video'); video.pauseVideo(); 

您可能需要从iframe切换到embed标记


此外,使用Flash时, SWFObject javascript库总是很好

追加元素与移动元素不同。 我没有深入研究这个答案的jQuery源代码,但我很确定当你拿一个元素并将其附加到其他地方时会发生什么,它只是复制原始节点,销毁它,然后将副本插入新位置。 这将破坏您的video状态。

猎人有你想要的答案。 通过隐藏video并使用youtube api来阻止它,您就可以有效地实现目标。