- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正试图在 youtube 视频结束后触发一个事件。视频嵌入有效,但视频结束后什么也没有发生。我想我缺少 EventListener 的一些东西......
这是我的代码:
var params = { allowScriptAccess: "always" };
var atts = { id: "myytplayer" };
var video = swfobject.embedSWF("http://www.youtube.com/v/elvOZm0d4H0?enablejsapi=1&playerapiid=ytplayer&version=3&rel=0&autoplay=1&controls=1","ytapiplayer", "450", "250", "8", null, null, params, atts);
XXXXX.addEventListener("onStateChange", function(state){
if(state === 0){
alert("Stack Overflow rocks!");
}
});
我不明白的是,我应该听什么?代码中标有“XXXXX”,我需要在那里放什么?我尝试了 myytplayer、video、ytplayer、ytapiplayer...他们中的大多数都给我一个错误,例如“找不到 ytplayer”。“ytapiplayer”没有抛出错误,但在视频播放完毕后也没有任何反应。
我搜索了堆栈溢出,但到目前为止我找到的所有“答案”都只是命名这个事件监听器,但没有解释我必须在“XXXXX”中放置什么。
我对此很陌生,非常欢迎任何帮助,谢谢!
JSFIDDLE:http://jsfiddle.net/T5HBZ/
编辑:编辑控件代码,添加 jsfiddle
最佳答案
这是你的工作代码,然后我会解释它:
var params = {
allowScriptAccess: "always"
};
var atts = {
id: "myytplayer"
};
var video = swfobject.embedSWF("http://www.youtube.com/v/elvOZm0d4H0?enablejsapi=1&playerapiid=ytplayer&version=3&rel=0&autoplay=1&controls=1", "ytapiplayer", "450", "250", "8", null, null, params, atts);
onYouTubePlayerReady = function (playerId) {
ytplayer = document.getElementById("myytplayer");
ytplayer.addEventListener("onStateChange", "onPlayerStateChange");
};
onPlayerStateChange = function (state) {
if (state === 0) {
alert("Stack Overflow rocks!");
}
};
首先要注意的是,当您使用 swfobject 嵌入播放器 SWF 时,您是在告诉该库用 swfobject 生成的 div 替换您引用的 div。因此 ytapiplayer div 将不再存在,但会有一个 id 为“myytplayer”的元素。请注意,当您将“enablejsapi=1”附加到您的 swf URL 时,swf 将加载视频并加载允许您控制视频的 javascript。
这是关键;当该 javascript 完成加载时,它会自动调用名为“onYouTubePlayerReady”的函数——无法更改该名称,因为它是从 youtube 加载的 javascript 的一部分。如果您不定义该函数,则什么也不会发生。不过,如果您确实定义了该函数,您就有机会开始与玩家互动。
所以您的代码缺少的是该函数的定义,您可以在该定义中将事件监听器直接添加到由 swfobject 创建的元素上(它必须在该函数内部发生;如果您尝试在回调,对象可能还不存在)。
另请注意,出于某种原因,让事件监听器引用实际函数作为其回调(而不是匿名函数)似乎更一致,因此您也会在代码中看到这一点。
当然,所有这些讨论都可以通过指出使用 iFrame 播放器 API 而不是 SWF/Javascript API 为您提供更好的服务来取代。信息在这里:
https://developers.google.com/youtube/iframe_api_reference
这是一种类似的方法,因为您加载一个 javascript 库,它会自动调用您定义的回调,您可以在其中设置与播放器的绑定(bind)、添加事件监听器等。真正的优势在于它将确定是自动提供 HTML5 播放器还是 Flash 播放器,您这边的 API 能够与任一播放器对话。
关于javascript - 如何在 Youtube 视频播放完毕后为事件添加事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18398914/
我搜索了很多东西,比如: How to show icon blinking on google map 但是根据这个我没有找到如何让通知图标闪烁 我想在这个上闪烁图标 int icon = R.d
我很想知道我是否可以删除或更改 android 在选项卡布局下方提供的类似 drop-shadow 的效果。 最佳答案 我一问这个问题,我就在另一个stackoverflow post中得到答案.无论
我必须通过 AlaramManager 调用我的 BroadcastReceiver。 为此,我所做的不起作用: AlarmActivity.java public class AlarmActivi
我正在尝试执行以下操作: CPU_COUNT=$(cat /proc/stat | grep -E "^cpu[[:digit:]]+ " | wc -l) let CPU_COUNT=CPU_COU
我是一名优秀的程序员,十分优秀!