Skip to content

Instantly share code, notes, and snippets.

@Matsuuu
Created November 5, 2024 08:17
Show Gist options
  • Save Matsuuu/a07f3c7a1c823bf3d369bf652de71282 to your computer and use it in GitHub Desktop.
Save Matsuuu/a07f3c7a1c823bf3d369bf652de71282 to your computer and use it in GitHub Desktop.
Pokemoncard.io card preview Bookmarklet
javascript: (() => { function cardHoverListener() {
let hoveredCard = undefined;
const observer = new MutationObserver((mutationList) => {
for (const list of mutationList) {
if (list.type === "childList") {
for (const node of list.addedNodes) {
if (node.classList.contains("img-container")) {
setupListeners(node);
}
}
}
}
});
function setupListeners(node) {
if (node.hasAttribute("hover-listener")) {
return;
}
node.setAttribute("hover-listener", "");
node.addEventListener("mouseenter", () => {
hoveredCard = node;
updateImage();
});
node.addEventListener("mouseleave", () => {
hoveredCard = undefined;
updateImage();
});
}
document.querySelectorAll(".img-container").forEach(container => setupListeners(container));
observer.observe(document.body, { childList: true, subtree: true });
const mouseFollowElement = document.createElement("div");
const mouseFollowImg = document.createElement("img");
mouseFollowElement.appendChild(mouseFollowImg);
mouseFollowElement.style.position = "fixed";
window.addEventListener("mousemove", (e) => {
mouseFollowElement.style.top = e.y - 200 + "px";
mouseFollowElement.style.left = e.x + 25 + "px";
});
document.body.appendChild(mouseFollowElement);
function updateImage() {
const imgSrc = hoveredCard?.querySelector("img")?.src;
if (imgSrc !== undefined) {
mouseFollowImg.src = imgSrc;
}
mouseFollowImg.style.display = imgSrc !== undefined ? "block" : "none";
}
}
cardHoverListener(); })();
function cardHoverListener() {
let hoveredCard = undefined;
const observer = new MutationObserver((mutationList) => {
for (const list of mutationList) {
if (list.type === "childList") {
for (const node of list.addedNodes) {
if (node.classList.contains("img-container")) {
setupListeners(node);
}
}
}
}
});
function setupListeners(node) {
if (node.hasAttribute("hover-listener")) {
return;
}
node.setAttribute("hover-listener", "");
node.addEventListener("mouseenter", () => {
hoveredCard = node;
updateImage();
});
node.addEventListener("mouseleave", () => {
hoveredCard = undefined;
updateImage();
});
}
document.querySelectorAll(".img-container").forEach(container => setupListeners(container));
observer.observe(document.body, { childList: true, subtree: true });
const mouseFollowElement = document.createElement("div");
const mouseFollowImg = document.createElement("img");
mouseFollowElement.appendChild(mouseFollowImg);
mouseFollowElement.style.position = "fixed";
window.addEventListener("mousemove", (e) => {
mouseFollowElement.style.top = e.y - 200 + "px";
mouseFollowElement.style.left = e.x + 25 + "px";
});
document.body.appendChild(mouseFollowElement);
function updateImage() {
const imgSrc = hoveredCard?.querySelector("img")?.src;
if (imgSrc !== undefined) {
mouseFollowImg.src = imgSrc;
}
mouseFollowImg.style.display = imgSrc !== undefined ? "block" : "none";
}
}
cardHoverListener();
@Matsuuu
Copy link
Author

Matsuuu commented Nov 5, 2024

image

Example of in use

@Matsuuu
Copy link
Author

Matsuuu commented Nov 5, 2024

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment