From 5e9f6139629b7d93ea752edf9c433b4019aba975 Mon Sep 17 00:00:00 2001 From: Valentin Silytuin Date: Tue, 21 Jan 2025 14:16:53 +0400 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA?= =?UTF-8?q?=D0=B0=20VK=20=D0=92=D0=B8=D0=B4=D0=B5=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.js | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++---- styles.css | 3 ++ 2 files changed, 90 insertions(+), 6 deletions(-) diff --git a/index.js b/index.js index 34192e9..ed66fc8 100644 --- a/index.js +++ b/index.js @@ -1,4 +1,4 @@ -/* globals GalleryYTPlayer, YT */ +/* globals GalleryYTPlayer, YT, GalleryVKPlayer, VK */ import getScrollbarWidth from '@advdominion/get-scrollbar-width'; @@ -9,8 +9,16 @@ const getYTPlayer = () => { document.body.append(script); }; +const getVKPlayer = () => { + const script = document.createElement('script'); + script.src = 'https://vk.com/js/api/videoplayer.js'; + script.async = true; + document.body.append(script); +}; + const playVideo = (slide) => { const youtube = slide.querySelector('.advdominion-lg__video_youtube'); + const vk = slide.querySelector('.advdominion-lg__video_vk'); if (youtube) { if (slide.YTPlayer) { @@ -36,14 +44,37 @@ const playVideo = (slide) => { playVideo(slide); }); } + } else if (vk) { + if (slide.VKPlayer) { + slide.VKPlayer.play(); + } else if (window.VK?.VideoPlayer) { + if (GalleryVKPlayer.state) { + slide.VKPlayer = VK.VideoPlayer(vk); + slide.VKPlayer.on('inited', () => { + slide.VKPlayer.play(); + }); + } else { + GalleryVKPlayer.addListener(() => { + playVideo(slide); + }); + } + } else { + getVKPlayer(); + GalleryVKPlayer.addListener(() => { + playVideo(slide); + }); + } } }; const pauseVideo = (slide) => { const youtube = slide.querySelector('.advdominion-lg__video_youtube'); + const vk = slide.querySelector('.advdominion-lg__video_vk'); if (youtube && slide.YTPlayer) { slide.YTPlayer.pauseVideo(); + } else if (vk && slide.VKPlayer) { + slide.VKPlayer.pause(); } }; @@ -102,10 +133,13 @@ const init = async (items = [], options = {}, index = 0) => { import('swiper/modules'), ]); - let isVideoInGallery = false; + const isVideoInGallery = { + yt: false, + vk: false, + }; items = items.map((item) => { if (/youtube\.com\/watch\?v=/.test(item)) { - isVideoInGallery = true; + isVideoInGallery.yt = true; return `
@@ -117,6 +151,27 @@ const init = async (items = [], options = {}, index = 0) => {
`; + } else if (/vkvideo\.ru\/video/.test(item)) { + isVideoInGallery.vk = true; + const videoId = /vkvideo.ru\/video(-?\d+)_(\d+)/.exec(item); + if (videoId === null) { + return ` +
+
+
+ Ошибка при загрузке VK-плеера +
+
+
+ `; + } + return ` +
+
+ +
+
+ `; } return `
@@ -125,7 +180,7 @@ const init = async (items = [], options = {}, index = 0) => { `; }); - if (isVideoInGallery && !window.GalleryYTPlayer) { + if (isVideoInGallery.yt && !window.GalleryYTPlayer) { window.GalleryYTPlayer = { state: false, get init() { @@ -148,6 +203,32 @@ const init = async (items = [], options = {}, index = 0) => { }; } + if (isVideoInGallery.vk && !window.GalleryVKPlayer) { + window.GalleryVKPlayer = { + state: false, + get init() { + return this.state; + }, + set init(val) { + this.state = val; + for (const i of this.callback) { + i(val); + } + }, + callback: [], + addListener(callback) { + this.callback.push(callback); + }, + }; + + const checkInterval = setInterval(() => { + if (window.VK?.VideoPlayer) { + clearInterval(checkInterval); + window.GalleryVKPlayer.init = true; + } + }, 100); + } + document.body.insertAdjacentHTML( 'beforeend', ` @@ -188,7 +269,7 @@ const init = async (items = [], options = {}, index = 0) => { playVideo(this.slides[this.activeIndex]); } - if (isVideoInGallery) { + if (isVideoInGallery.yt || isVideoInGallery.vk) { setVideoSize(gallery); } }); @@ -203,7 +284,7 @@ const init = async (items = [], options = {}, index = 0) => { }); swiper.on('resize', function () { - if (isVideoInGallery) { + if (isVideoInGallery.yt || isVideoInGallery.vk) { setVideoSize(gallery); } }); diff --git a/styles.css b/styles.css index 4dd65ee..ad50a3d 100644 --- a/styles.css +++ b/styles.css @@ -65,3 +65,6 @@ div.advdominion-lg__video { .advdominion-lg__video_youtube { } + +.advdominion-lg__video_vk { +}