Javascript 当某个条件为真时,清除setInterval时出现问题
我正在使用YouTube iFrame API嵌入多个视频。我设置了一个时间间隔来获取视频的当前时间,并在视频被点击后关闭播放器。当满足此条件时,我会触发单击关闭图标,该图标应处理清除间隔和其他功能 当我在视频结束前关闭视频时,它会起作用。但是,当我在满足上述条件的情况下触发相同的功能时,间隔将不会清除/似乎会再次调用 代码: 当我在视频播放/暂停时单击“Javascript 当某个条件为真时,清除setInterval时出现问题,javascript,jquery,dom-events,Javascript,Jquery,Dom Events,我正在使用YouTube iFrame API嵌入多个视频。我设置了一个时间间隔来获取视频的当前时间,并在视频被点击后关闭播放器。当满足此条件时,我会触发单击关闭图标,该图标应处理清除间隔和其他功能 当我在视频结束前关闭视频时,它会起作用。但是,当我在满足上述条件的情况下触发相同的功能时,间隔将不会清除/似乎会再次调用 代码: 当我在视频播放/暂停时单击“ytPlayerCloseBtn”时,它工作正常并清除间隔 当此点击由条件触发时(if(ytPlayerCurrentTime>ytplaye
ytPlayerCloseBtn
”时,它工作正常并清除间隔
当此点击由条件触发时(if(ytPlayerCurrentTime>ytplayercustomedtime).
)不会清除间隔。我的控制台日志继续运行
我已经尝试了很多不同的方法,但是我不明白为什么clearInterval在这种情况下不起作用 这是您的完整代码吗?@Luca这是代码的相关部分,不过我会用更多的代码更新我的问题。我们需要看看这些函数是如何调用的。例如,
closeThePlayerOverlay
只是将click事件的处理程序添加到特定元素中,因此它不会对UI进行任何更改…@HereticMonkey我添加了更多的代码!您在哪里声明scriberUpdate
变量?
// Call on the YouTube iFrame API.
var tag = document.createElement('script');
tag.src = 'https://www.youtube.com/iframe_api';
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var scrubberUpdate;
// Setup our player.
onYouTubeIframeAPIReady = function() {
ytPlayer = new YT.Player(ytPlayerTarget, {
width: '100%',
playerVars: {
'autohide': 1,
'autoplay': 1,
'cc_load_policy': 0,
'controls': 1,
'disablekb': 0,
'end': 0,
'wmode': 'transparent',
'fs': 1,
'loop': 0,
'html5': 1,
'playsinline': 1,
'rel': 0,
},
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
};
function closeFunc() {
clearInterval(scrubberUpdate);
ytPlayer.pauseVideo();
ytPlayerCloseBtn.add(ytPlayerContainer).hide();
ytPlayerWrapper.removeClass('playing').fadeOut();
}
function closeThePlayerOverlay() {
ytPlayerCloseBtn.on('click', function() {
closeFunc();
});
}
function scrubberWidthCalc() {
var ytPlayerDuration = ytPlayer.getDuration();
var ytPlayerCustomEndTime = ytPlayerDuration - 0.2;
var ytPlayerCurrentTime = ytPlayer.getCurrentTime();
ytPlayerScrubber.css({
'width': (ytPlayerCurrentTime / ytPlayerDuration) * 100 + '%'
});
if (ytPlayerCurrentTime > ytPlayerCustomEndTime) {
ytPlayerCloseBtn.trigger('click');
}
}
function scrubberWidth() {
// console.log('scrubberUpdate');
scrubberUpdate = setInterval(function() {
scrubberWidthCalc();
}, 10);
}
function loadVideo(theSource) {
ytPlayer.loadVideoById(theSource, 0, 'default');
ytPlayer.playVideo();
scrubberWidth();
}
function triggerVideoPlayback() {
ytPlayerTrigger.on('click', function() {
var $this = $(this);
var theSource = $this.data('yt-dynamic-src');
handleInline($this);
if (ytPlayerWrapper.hasClass('playing')) {
ytPlayer.pauseVideo();
loadVideo(theSource);
} else {
openThePlayerOverlay();
loadVideo(theSource);
}
});
}
function onPlayerReady() {
playPauseFun();
closeThePlayerOverlay();
handleFullscreen();
triggerVideoPlayback();
}