Более корректное воспроизведение видео при быстром пролистывании

This commit is contained in:
Valentin Silytuin 2025-04-24 23:32:07 +04:00
parent 4477563c66
commit 51abd182a2
1 changed files with 29 additions and 16 deletions

View File

@ -23,14 +23,18 @@ const playVideo = (slide) => {
if (youtube) {
if (slide.YTPlayer) {
slide.YTPlayer.playVideo();
if (slide.classList.contains('swiper-slide-active')) {
slide.YTPlayer.playVideo();
}
} else if (window.YT) {
if (GalleryYTPlayer.state) {
slide.YTPlayer = new YT.Player(youtube, {
videoId: youtube.dataset.id,
events: {
onReady(event) {
event.target.playVideo();
if (slide.classList.contains('swiper-slide-active')) {
event.target.playVideo();
}
},
},
});
@ -47,12 +51,16 @@ const playVideo = (slide) => {
}
} else if (vk) {
if (slide.VKPlayer) {
slide.VKPlayer.play();
if (slide.classList.contains('swiper-slide-active')) {
slide.VKPlayer.play();
}
} else if (window.VK?.VideoPlayer) {
if (GalleryVKPlayer.state) {
slide.VKPlayer = VK.VideoPlayer(vk);
slide.VKPlayer.on('inited', () => {
slide.VKPlayer.play();
if (slide.classList.contains('swiper-slide-active')) {
slide.VKPlayer.play();
}
});
} else {
GalleryVKPlayer.addListener(() => {
@ -71,13 +79,15 @@ const playVideo = (slide) => {
if (window.GalleryRTPlayer) {
if (window.GalleryRTPlayer.has(videoId)) {
clearInterval(checkInterval);
rt.contentWindow.postMessage(
JSON.stringify({
type: 'player:play',
data: {},
}),
'*',
);
if (slide.classList.contains('swiper-slide-active')) {
rt.contentWindow.postMessage(
JSON.stringify({
type: 'player:play',
data: {},
}),
'*',
);
}
}
} else {
clearInterval(checkInterval);
@ -338,11 +348,14 @@ const init = async (items = [], options = {}, index = 0) => {
});
swiper.on('slideChange', function () {
if (this.slides[this.previousIndex].classList.contains('advdominion-lg__item_video')) {
pauseVideo(this.slides[this.previousIndex]);
}
if (this.slides[this.activeIndex].classList.contains('advdominion-lg__item_video')) {
playVideo(this.slides[this.activeIndex]);
for (const [index, slide] of Object.entries(this.slides)) {
if (slide.classList.contains('advdominion-lg__item_video')) {
if (Number(index) === this.activeIndex) {
playVideo(slide);
} else {
pauseVideo(slide);
}
}
}
});