Parece que nada foi encontrado neste local.
document.addEventListener('DOMContentLoaded', () => { const container = document.getElementById('sv-feed-container'); const wrapper = document.getElementById('sv-feed-wrapper'); if (!container || !wrapper || !window.SV_PLAYLIST || window.SV_PLAYLIST.length === 0) return; let playlist = shuffleArray([...window.SV_PLAYLIST]); let currentIndex = 0; let players = {}; let userPreferences = { muted: localStorage.getItem('sv_muted') !== null ? localStorage.getItem('sv_muted') === 'true' : false, volume: localStorage.getItem('sv_volume') !== null ? parseFloat(localStorage.getItem('sv_volume')) : 1.0 }; function shuffleArray(array) { for (let i = array.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [array[i], array[j]] = [array[j], array[i]]; } return array; } function buildInitialDOM() { wrapper.innerHTML = ''; playlist.forEach((item, index) => { const slide = document.createElement('section'); slide.className = 'sv-slide'; slide.dataset.index = index; slide.dataset.loaded = 'false'; wrapper.appendChild(slide); }); updateLoadedSlides(); setupObserver(); } function updateLoadedSlides() { const slides = wrapper.querySelectorAll('.sv-slide'); const buffer = 1; slides.forEach((slide, index) => { const shouldBeLoaded = index >= currentIndex - buffer && index <= currentIndex + buffer; const isLoaded = slide.dataset.loaded === 'true'; if (shouldBeLoaded && !isLoaded) { const item = playlist[index]; if (item.type === 'bunny') { const iframe = document.createElement('iframe'); iframe.className = 'sv-video sv-bunny-player'; iframe.src = item.url; iframe.allow = "accelerometer; autoplay; gyroscope; picture-in-picture"; iframe.frameBorder = "0"; slide.appendChild(iframe); initPlayerApi(index, iframe, 'bunny'); } else { const video = document.createElement('video'); video.className = 'sv-video'; video.src = item.url; video.playsInline = true; video.loop = true; video.controls = false; slide.appendChild(video); initPlayerApi(index, video, 'mp4'); } slide.dataset.loaded = 'true'; } else if (!shouldBeLoaded && isLoaded) { if (players[index]) { try { players[index].destroy(); } catch(e){} delete players[index]; } slide.innerHTML = ''; slide.dataset.loaded = 'false'; } }); managePlayback(); } function initPlayerApi(index, element, type) { if (type === 'bunny' && window.playerjs) { const player = new playerjs.Player(element); players[index] = player; player.on('ready', () => { applyAudioPreferences(player, 'bunny'); if (index === currentIndex) { player.play(); } else { player.pause(); } }); player.on('volumechange', () => { player.getMuted((isMuted) => { userPreferences.muted = isMuted; localStorage.setItem('sv_muted', isMuted); }); player.getVolume((vol) => { userPreferences.volume = vol / 100; localStorage.setItem('sv_volume', userPreferences.volume); }); }); } else if (type === 'mp4') { applyAudioPreferences(element, 'mp4'); if (index === currentIndex) { element.play().catch(() => {}); } element.addEventListener('volumechange', () => { userPreferences.muted = element.muted; userPreferences.volume = element.volume; localStorage.setItem('sv_muted', element.muted); localStorage.setItem('sv_volume', element.volume); }); } } function applyAudioPreferences(playerOrVideo, type) { if (type === 'bunny') { if (userPreferences.muted) { playerOrVideo.mute(); } else { playerOrVideo.unmute(); playerOrVideo.setVolume(userPreferences.volume * 100); } } else { playerOrVideo.muted = userPreferences.muted; playerOrVideo.volume = userPreferences.volume; } } function managePlayback() { playlist.forEach((_, index) => { const slide = wrapper.querySelector(`.sv-slide[data-index="${index}"]`); if (!slide) return; const player = players[index]; const video = slide.querySelector('video'); if (index === currentIndex) { if (player) { applyAudioPreferences(player, 'bunny'); player.play(); } else if (video) { applyAudioPreferences(video, 'mp4'); video.play().catch(() => {}); } } else { if (player) { player.pause(); } else if (video) { video.pause(); } } }); } function setupObserver() { const options = { root: container, threshold: 0.6 }; const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { const newIndex = parseInt(entry.target.dataset.index); if (newIndex !== currentIndex) { currentIndex = newIndex; updateLoadedSlides(); if (currentIndex === playlist.length - 1) { setTimeout(() => { playlist = shuffleArray([...window.SV_PLAYLIST]); currentIndex = 0; buildInitialDOM(); container.scrollTop = 0; }, 2000); } } } }); }, options); wrapper.querySelectorAll('.sv-slide').forEach(slide => observer.observe(slide)); } buildInitialDOM(); });
Parece que nada foi encontrado neste local.