71 lines
2.3 KiB
JavaScript
Executable File
71 lines
2.3 KiB
JavaScript
Executable File
// ============================================
|
|
// bg.js - Optimized with WebM support
|
|
// ============================================
|
|
(function() {
|
|
'use strict';
|
|
|
|
const bgs = [
|
|
"/data/fond/moon_1080p.webm", // Changed to WebM
|
|
"/data/fond/astro.webp", // Changed to WebP
|
|
"/data/fond/Pino.png",
|
|
];
|
|
|
|
const bgIndex = Math.floor(Date.now() / (1000 * 60 * 60 * 24)) % bgs.length;
|
|
|
|
let visibilityHandler = null;
|
|
|
|
document.addEventListener("DOMContentLoaded", () => {
|
|
const src = bgs[bgIndex];
|
|
const video = document.getElementById("bg-video");
|
|
const img = document.getElementById("bg-image");
|
|
|
|
if (!video || !img) return;
|
|
|
|
const isVideo = /\.(mp4|webm|ogg)$/i.test(src);
|
|
const prefersReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
|
|
// Reduced motion → force image with WebP fallback
|
|
if (prefersReducedMotion && isVideo) {
|
|
const fallback = src.replace(/\.(mp4|webm|ogg)$/i, ".webp");
|
|
img.src = fallback;
|
|
img.style.display = "block";
|
|
video.style.display = "none";
|
|
return;
|
|
}
|
|
|
|
if (isVideo) {
|
|
video.src = src;
|
|
video.style.display = "block";
|
|
img.style.display = "none";
|
|
|
|
// Visibility handler for pause/play
|
|
visibilityHandler = function() {
|
|
if (document.hidden) {
|
|
video.pause();
|
|
} else {
|
|
video.play().catch(e => console.log('Video play prevented:', e));
|
|
}
|
|
};
|
|
|
|
document.addEventListener('visibilitychange', visibilityHandler);
|
|
|
|
// Cleanup on page unload
|
|
window.addEventListener('beforeunload', () => {
|
|
if (visibilityHandler) {
|
|
document.removeEventListener('visibilitychange', visibilityHandler);
|
|
}
|
|
video.pause();
|
|
video.src = '';
|
|
});
|
|
|
|
video.load();
|
|
} else {
|
|
img.src = src;
|
|
img.style.display = "block";
|
|
video.style.display = "none";
|
|
video.pause();
|
|
video.src = '';
|
|
}
|
|
});
|
|
})();
|