的问题是,你没有在iframe中事件的控制,所以当用户刷过该区域不能告诉。我建议的解决方法是在不观看的情况下用图像占位符替换iframe。为了做到这一点,请使用YouTube's Iframe API来跟踪视频事件。当视频从播放停止时,我们将隐藏视频并显示图像。 Here is a demo。
HTML
<div ng-app="app">
<div ng-controller="ctrl" ng-swipe-right="msg($event, 'right')" ng-swipe-left="msg($event, 'left')">
<div id="player"></div>
<img id="player-cover" src="http://img.youtube.com/vi/M7lc1UVf-VE/hqdefault.jpg" />
</div>
</div>
JS
在启动它隐藏的视频。当图像被点击时,它显示并播放视频。当视频从暂停播放onPlayerStateChange
处理切换图像和视频。每次在图像上调用滑动事件时,它也会触发图像的单击事件处理程序。变量swiping
会记录事件是否只是点击或滑动。
var app = angular.module('app', ['ngTouch']);
app.controller('ctrl', function($scope) {
$scope.msg = function(event, msg) {
swiping = true;
alert(msg);
}
});
// keep track of the user swiping. onYouTubeIframeAPIReady needs to occur outside of Angular.
var swiping = false;
// Youtube related.
document.getElementById('player').style.display = 'none';
document.getElementById('player-cover').addEventListener("click", function() {
if (swiping) {
swiping = false;
return;
}
document.getElementById('player').style.display = 'block';
player.playVideo();
});
// This code loads the IFrame Player API code asynchronously.
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
// This function creates an <iframe> (and YouTube player) after the API code downloads.
var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', {
height: '390',
width: '640',
videoId: 'M7lc1UVf-VE',
events: { 'onStateChange': onPlayerStateChange }
});
}
function onPlayerStateChange(event) {
if (event.data === YT.PlayerState.PAUSED || event.data === YT.PlayerState.ENDED) {
document.getElementById('player-cover').style.display = 'block';
document.getElementById('player').style.display = 'none';
} else {
document.getElementById('player-cover').style.display = 'none';
document.getElementById('player').display = 'block';
}
}
这似乎是同一个问题 - http://stackoverflow.com/questions/28180672/youtube-cannot-swipe-past-iframe-in-carousel-slider - 他们推荐使用代替图像的iframe的开始。这是一个可行的解决方案吗? – jjbskir
@jjbskir,嗯,我可以使用自定义播放按钮的图像,并用ng-show单击替换视频和图像,但如果用户暂停视频,他将无法再次滑动。另外我不知道是否可以用自定义按钮启动视频;) – akn