在flex slider angularjs中单击新的视频幻灯片时,暂停当前播放的YouTube视频
我正在使用来自此链接的ng youtube嵌入插件。我的网站上安装了flex slider。视频显示在flex slider分区中。请参见所附图像在flex slider angularjs中单击新的视频幻灯片时,暂停当前播放的YouTube视频,angularjs,youtube,flexslider,Angularjs,Youtube,Flexslider,我正在使用来自此链接的ng youtube嵌入插件。我的网站上安装了flex slider。视频显示在flex slider分区中。请参见所附图像 <flex-slider slider-id="slider" flex-slide="item in videos track by $index" animation="fade" animation-loop="false" sync="#carousel" slideshow="false" control-nav="f
<flex-slider slider-id="slider" flex-slide="item in videos track by $index" animation="fade" animation-loop="false" sync="#carousel" slideshow="false" control-nav="false" init-delay="100">
<li>
<ng-youtube-embed
video="item.id"
videoid = "myvideo"
autoplay="false"
color="white"
width="1280px"
height="650px"
disablekb="true"
modestbranding="true"
end="400"
enablejsapi="true"
onready="playerReady"
onstatechange="stateChanged"
>
</ng-youtube-embed>
</li>
</flex-slider>
</div>
<div class="col-sm-12">
<flex-slider class="stop" slider-id="carousel" flex-slide="item in videos track by $index" animation="slide" animation-loop="false" item-width="210" item-margin="5" as-nav-for="#slider" slideshow="false" control-nav="false">
<li>
<md-card>
<img ng-src="https://img.youtube.com/vi/{{item.id}}/hqdefault.jpg" class="md-card-image"/>
<md-content>
<md-card-title>
<md-card-title-text><span class="md-headline">{{item.title}}</span></md-card-title-text>
</md-card-title>
<md-card-content>
{{item.description}}
</md-card-content>
</md-content>
</md-card>
</li>
</flex-slider>
</div>
</div>
</div>`
当我播放一个视频,然后单击旋转木马中的其他视频时,先前播放的视频不会暂停。我在下面附上我的html代码:-
<flex-slider slider-id="slider" flex-slide="item in videos track by $index" animation="fade" animation-loop="false" sync="#carousel" slideshow="false" control-nav="false" init-delay="100">
<li>
<ng-youtube-embed
video="item.id"
videoid = "myvideo"
autoplay="false"
color="white"
width="1280px"
height="650px"
disablekb="true"
modestbranding="true"
end="400"
enablejsapi="true"
onready="playerReady"
onstatechange="stateChanged"
>
</ng-youtube-embed>
</li>
</flex-slider>
</div>
<div class="col-sm-12">
<flex-slider class="stop" slider-id="carousel" flex-slide="item in videos track by $index" animation="slide" animation-loop="false" item-width="210" item-margin="5" as-nav-for="#slider" slideshow="false" control-nav="false">
<li>
<md-card>
<img ng-src="https://img.youtube.com/vi/{{item.id}}/hqdefault.jpg" class="md-card-image"/>
<md-content>
<md-card-title>
<md-card-title-text><span class="md-headline">{{item.title}}</span></md-card-title-text>
</md-card-title>
<md-card-content>
{{item.description}}
</md-card-content>
</md-content>
</md-card>
</li>
</flex-slider>
</div>
</div>
</div>`
`
<flex-slider slider-id="slider" flex-slide="item in videos track by $index" animation="fade" animation-loop="false" sync="#carousel" slideshow="false" control-nav="false" init-delay="100">
<li>
<ng-youtube-embed
video="item.id"
videoid = "myvideo"
autoplay="false"
color="white"
width="1280px"
height="650px"
disablekb="true"
modestbranding="true"
end="400"
enablejsapi="true"
onready="playerReady"
onstatechange="stateChanged"
>
</ng-youtube-embed>
</li>
</flex-slider>
</div>
<div class="col-sm-12">
<flex-slider class="stop" slider-id="carousel" flex-slide="item in videos track by $index" animation="slide" animation-loop="false" item-width="210" item-margin="5" as-nav-for="#slider" slideshow="false" control-nav="false">
<li>
<md-card>
<img ng-src="https://img.youtube.com/vi/{{item.id}}/hqdefault.jpg" class="md-card-image"/>
<md-content>
<md-card-title>
<md-card-title-text><span class="md-headline">{{item.title}}</span></md-card-title-text>
</md-card-title>
<md-card-content>
{{item.description}}
</md-card-content>
</md-content>
</md-card>
</li>
</flex-slider>
</div>
</div>
</div>`
这种逻辑有时会起作用。
大多数情况下,我会在控制台中看到以下错误。检查附加的图像
<flex-slider slider-id="slider" flex-slide="item in videos track by $index" animation="fade" animation-loop="false" sync="#carousel" slideshow="false" control-nav="false" init-delay="100">
<li>
<ng-youtube-embed
video="item.id"
videoid = "myvideo"
autoplay="false"
color="white"
width="1280px"
height="650px"
disablekb="true"
modestbranding="true"
end="400"
enablejsapi="true"
onready="playerReady"
onstatechange="stateChanged"
>
</ng-youtube-embed>
</li>
</flex-slider>
</div>
<div class="col-sm-12">
<flex-slider class="stop" slider-id="carousel" flex-slide="item in videos track by $index" animation="slide" animation-loop="false" item-width="210" item-margin="5" as-nav-for="#slider" slideshow="false" control-nav="false">
<li>
<md-card>
<img ng-src="https://img.youtube.com/vi/{{item.id}}/hqdefault.jpg" class="md-card-image"/>
<md-content>
<md-card-title>
<md-card-title-text><span class="md-headline">{{item.title}}</span></md-card-title-text>
</md-card-title>
<md-card-content>
{{item.description}}
</md-card-content>
</md-content>
</md-card>
</li>
</flex-slider>
</div>
</div>
</div>`
<flex-slider slider-id="slider" flex-slide="item in videos track by $index" animation="fade" animation-loop="false" sync="#carousel" slideshow="false" control-nav="false" init-delay="100">
<li>
<ng-youtube-embed
video="item.id"
videoid = "myvideo"
autoplay="false"
color="white"
width="1280px"
height="650px"
disablekb="true"
modestbranding="true"
end="400"
enablejsapi="true"
onready="playerReady"
onstatechange="stateChanged"
>
</ng-youtube-embed>
</li>
</flex-slider>
</div>
<div class="col-sm-12">
<flex-slider class="stop" slider-id="carousel" flex-slide="item in videos track by $index" animation="slide" animation-loop="false" item-width="210" item-margin="5" as-nav-for="#slider" slideshow="false" control-nav="false">
<li>
<md-card>
<img ng-src="https://img.youtube.com/vi/{{item.id}}/hqdefault.jpg" class="md-card-image"/>
<md-content>
<md-card-title>
<md-card-title-text><span class="md-headline">{{item.title}}</span></md-card-title-text>
</md-card-title>
<md-card-content>
{{item.description}}
</md-card-content>
</md-content>
</md-card>
</li>
</flex-slider>
</div>
</div>
</div>`
我想暂停当前播放的视频。我做错了什么 在视频旋转木马中一次播放一个视频是相当棘手但很容易的
<flex-slider slider-id="slider" flex-slide="item in videos track by $index" animation="fade" animation-loop="false" sync="#carousel" slideshow="false" control-nav="false" init-delay="100">
<li>
<ng-youtube-embed
video="item.id"
videoid = "myvideo"
autoplay="false"
color="white"
width="1280px"
height="650px"
disablekb="true"
modestbranding="true"
end="400"
enablejsapi="true"
onready="playerReady"
onstatechange="stateChanged"
>
</ng-youtube-embed>
</li>
</flex-slider>
</div>
<div class="col-sm-12">
<flex-slider class="stop" slider-id="carousel" flex-slide="item in videos track by $index" animation="slide" animation-loop="false" item-width="210" item-margin="5" as-nav-for="#slider" slideshow="false" control-nav="false">
<li>
<md-card>
<img ng-src="https://img.youtube.com/vi/{{item.id}}/hqdefault.jpg" class="md-card-image"/>
<md-content>
<md-card-title>
<md-card-title-text><span class="md-headline">{{item.title}}</span></md-card-title-text>
</md-card-title>
<md-card-content>
{{item.description}}
</md-card-content>
</md-content>
</md-card>
</li>
</flex-slider>
</div>
</div>
</div>`
就连我几天前也遇到了同样的问题,当时我正在制作视频传送带。。。最后,我现在有了一个解决方案。。。首先,使用
标记嵌入youtube视频,并在视频url的末尾键入以下内容?html5=1&enablejsapi=1
。。。然后直接在您的项目中包含以下JavaScript代码,而无需对其进行任何编辑
<flex-slider slider-id="slider" flex-slide="item in videos track by $index" animation="fade" animation-loop="false" sync="#carousel" slideshow="false" control-nav="false" init-delay="100">
<li>
<ng-youtube-embed
video="item.id"
videoid = "myvideo"
autoplay="false"
color="white"
width="1280px"
height="650px"
disablekb="true"
modestbranding="true"
end="400"
enablejsapi="true"
onready="playerReady"
onstatechange="stateChanged"
>
</ng-youtube-embed>
</li>
</flex-slider>
</div>
<div class="col-sm-12">
<flex-slider class="stop" slider-id="carousel" flex-slide="item in videos track by $index" animation="slide" animation-loop="false" item-width="210" item-margin="5" as-nav-for="#slider" slideshow="false" control-nav="false">
<li>
<md-card>
<img ng-src="https://img.youtube.com/vi/{{item.id}}/hqdefault.jpg" class="md-card-image"/>
<md-content>
<md-card-title>
<md-card-title-text><span class="md-headline">{{item.title}}</span></md-card-title-text>
</md-card-title>
<md-card-content>
{{item.description}}
</md-card-content>
</md-content>
</md-card>
</li>
</flex-slider>
</div>
</div>
</div>`
所需函数的JavaScript代码如下-
<flex-slider slider-id="slider" flex-slide="item in videos track by $index" animation="fade" animation-loop="false" sync="#carousel" slideshow="false" control-nav="false" init-delay="100">
<li>
<ng-youtube-embed
video="item.id"
videoid = "myvideo"
autoplay="false"
color="white"
width="1280px"
height="650px"
disablekb="true"
modestbranding="true"
end="400"
enablejsapi="true"
onready="playerReady"
onstatechange="stateChanged"
>
</ng-youtube-embed>
</li>
</flex-slider>
</div>
<div class="col-sm-12">
<flex-slider class="stop" slider-id="carousel" flex-slide="item in videos track by $index" animation="slide" animation-loop="false" item-width="210" item-margin="5" as-nav-for="#slider" slideshow="false" control-nav="false">
<li>
<md-card>
<img ng-src="https://img.youtube.com/vi/{{item.id}}/hqdefault.jpg" class="md-card-image"/>
<md-content>
<md-card-title>
<md-card-title-text><span class="md-headline">{{item.title}}</span></md-card-title-text>
</md-card-title>
<md-card-content>
{{item.description}}
</md-card-content>
</md-content>
</md-card>
</li>
</flex-slider>
</div>
</div>
</div>`
<script>
var ytplayerList;
function onPlayerReady(e) {
var video_data = e.target.getVideoData(),
label = video_data.video_id+':'+video_data.title;
e.target.ulabel = label;
console.log(label + " is ready!");
}
function onPlayerError(e) {
console.log('[onPlayerError]');
}
function onPlayerStateChange(e) {
var label = e.target.ulabel;
if (e["data"] == YT.PlayerState.PLAYING) {
console.log({
event: "youtube",
action: "play:"+e.target.getPlaybackQuality(),
label: label
});
//if one video is play then pause other
pauseOthersYoutubes(e.target);
}
if (e["data"] == YT.PlayerState.PAUSED) {
console.log({
event: "youtube",
action: "pause:"+e.target.getPlaybackQuality(),
label: label
});
}
if (e["data"] == YT.PlayerState.ENDED) {
console.log({
event: "youtube",
action: "end",
label: label
});
}
//track number of buffering and quality of video
if (e["data"] == YT.PlayerState.BUFFERING) {
e.target.uBufferingCount?++e.target.uBufferingCount:e.target.uBufferingCount=1;
console.log({
event: "youtube",
action: "buffering["+e.target.uBufferingCount+"]:"+e.target.getPlaybackQuality(),
label: label
});
//if one video is play then pause other, this is needed because at start video is in buffered state and start playing without go to playing state
if( YT.PlayerState.UNSTARTED == e.target.uLastPlayerState ){
pauseOthersYoutubes(e.target);
}
}
//last action keep stage in uLastPlayerState
if( e.data != e.target.uLastPlayerState ) {
console.log(label + ":state change from " + e.target.uLastPlayerState + " to " + e.data);
e.target.uLastPlayerState = e.data;
}
}
function initYoutubePlayers(){
ytplayerList = null; //reset
ytplayerList = []; //create new array to hold youtube player
for (var e = document.getElementsByTagName("iframe"), x = e.length; x-- ;) {
if (/youtube.com\/embed/.test(e[x].src)) {
ytplayerList.push(initYoutubePlayer(e[x]));
console.log("create a Youtube player successfully");
}
}
}
function pauseOthersYoutubes( currentPlayer ) {
if (!currentPlayer) return;
for (var i = ytplayerList.length; i-- ;){
if( ytplayerList[i] && (ytplayerList[i] != currentPlayer) ){
ytplayerList[i].pauseVideo();
}
}
}
//init a youtube iframe
function initYoutubePlayer(ytiframe){
console.log("have youtube iframe");
var ytp = new YT.Player(ytiframe, {
events: {
onStateChange: onPlayerStateChange,
onError: onPlayerError,
onReady: onPlayerReady
}
});
ytiframe.ytp = ytp;
return ytp;
}
function onYouTubeIframeAPIReady() {
console.log("YouTubeIframeAPI is ready");
initYoutubePlayers();
}
var tag = document.createElement('script');
//use https when loading script and youtube iframe src since if user is logging in youtube the youtube src will switch to https.
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
</script>
沟球转盘
&拉阔;
&拉阔;
游戏主义者;
函数onPlayerReady(e){
var video_data=e.target.getVideoData(),
label=video_data.video_id+':'+video_data.title;
e、 target.ulabel=标签;
日志(标签+“准备就绪!”);
}
函数onplayerror(e){
log(“[onplayerror]”);
}
函数onPlayerStateChange(e){
var标签=e.target.ulabel;
如果(e[“数据”]==YT.PlayerState.PLAYING){
console.log({
事件:“youtube”,
动作:“播放:+e.target.getPlaybackQuality(),
标签:标签
});
//如果正在播放一个视频,则暂停另一个视频
暂停其他管道(如目标);
}
如果(e[“数据”]==YT.PlayerState.PAUSED){
console.log({
事件:“youtube”,
操作:“暂停:+e.target.getPlaybackQuality(),
标签:标签
});
}
如果(e[“数据”]==YT.PlayerState.ENDED){
console.log({
事件:“youtube”,
行动:“结束”,
标签:标签
});
}
//缓冲音轨数和视频质量
如果(e[“数据”]==YT.PlayerState.BUFFERING){
e、 target.uBufferingCount?+e.target.uBufferingCount:e.target.uBufferingCount=1;
console.log({
事件:“youtube”,
操作:“缓冲[”+e.target.uBufferingCount+”]:“+e.target.getPlaybackQuality(),
标签:标签
});
//如果播放一个视频,则需要暂停另一个视频,因为开始时视频处于缓冲状态,开始播放时不进入播放状态
if(YT.PlayerState.UNSTARTED==e.target.uLastPlayerState){
暂停其他管道(如目标);
}
}
//最后一个动作在uLastPlayerState中保持阶段
if(e.data!=e.target.uLastPlayerState){
console.log(标签+”:状态从“+e.target.uLastPlayerState+”更改为“+e.data”);
e、 target.uLastPlayerState=e.data;
}
}
函数inityoutubeplyers(){
ytplayerList=null;//重置
ytplayerList=[];//创建新数组以容纳youtube播放器
对于(var e=document.getElementsByTagName(“iframe”),x=e.length;x--;){
if(/youtube.com\/embed/.test(e[x].src)){
ytplayerList.push(inityoutubeplyer(e[x]);
log(“成功创建Youtube播放器”);
}
}
}
功能暂停其他输出管(currentPlayer){
如果(!currentPlayer)返回;
for(var i=ytplayerList.length;i--;){
if(ytplayerList[i]&&(ytplayerList[i]!=currentPlayer)){
ytplayerList[i].pauseVideo();
}
}
}
//初始化youtube iframe
函数inityoutubeplyer(ytiframe){
log(“拥有youtube iframe”);
var ytp=新的YT.播放器(YT帧{
活动:{
onStateChange:onPlayerStateChange,
onError:ONPLAYERROR,
onReady:onPlayerReady
}
});
ytiframe.ytp=ytp;
返回ytp;
}
函数onyoutubeiframeapiredy(){
log(“YouTubeIframeAPI已准备就绪”);
initYoutubePlayers();
}
var tag=document.createElement('script');
//加载脚本和youtube iframe src时使用https,因为如果用户登录youtube,youtube src将切换到https。
tag.src=”https://www.youtube.com/iframe_api";
var firstScriptTag=document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(标记,