Greasy Fork is available in English.
Force TMDB to load unloaded images
当前为
// ==UserScript==
// @name TMDB load unloaded images
// @namespace https://github.com/Tetrax-10
// @description Force TMDB to load unloaded images
// @icon https://www.google.com/s2/favicons?sz=64&domain=themoviedb.org
// @license MIT
// @version 1.0
// @match *://*.themoviedb.org/*
// @run-at document-idle
// ==/UserScript==
;(() => {
function changeSrc(img) {
if (
img.src.includes("media.themoviedb.org") &&
[".jpg", ".png"].some((e) => img.src.endsWith(e)) &&
!img.naturalHeight &&
img.hasAttribute("srcset")
) {
// Get the resolution and id of the image
const resolution = img.src.match(/\/t\/p\/([^\/]+)\/[^\/]+$/)?.[1] ?? ""
const id = img.src.split("/").pop()
img.src = `https://image.tmdb.org/t/p/${resolution}/${id}`
img.removeAttribute("srcset")
}
}
// Function to handle intersection events
function handleIntersection(entries, observer) {
entries.forEach((entry) => {
if (entry.isIntersecting) {
// Check if the element is visible in the viewport
const imgElement = entry.target
changeSrc(imgElement) // Change the image source if it's unloaded
observer.unobserve(imgElement) // Stop observing the current image after it's logged
}
})
}
// Create a new IntersectionObserver instance
const observer = new IntersectionObserver(handleIntersection, {
root: null, // Observe the viewport
rootMargin: "0px", // No margin around the viewport
threshold: 0.1, // Trigger when at least 10% of the image is visible
})
// Select all img elements and observe them
document.querySelectorAll("img").forEach((img) => {
observer.observe(img)
})
})()