biegen / compare.js
Pixelkram's picture
Deploy app
1624300 verified
Raw History Blame Contribute Delete
1.41 kB
// The results: every image bent, the same seed without tools under a wipe that follows the pointer.
// Runs as js_on_load of a gr.HTML component. The listeners sit on `element`, so they survive new results.
let sticky = false;
function setCut(card, pct, wiping) {
const frame = card.querySelector(".bc-frame");
if (!frame) return;
frame.style.setProperty("--cut", pct + "%");
frame.classList.toggle("bc-wiping", wiping);
}
function reset() {
element.querySelectorAll(".bc-card[data-both]").forEach((c) => setCut(c, sticky ? 100 : 0, false));
}
element.addEventListener("pointermove", (e) => {
const frame = e.target.closest(".bc-frame");
if (!frame) return;
const r = frame.getBoundingClientRect();
const pct = Math.round(100 * Math.min(1, Math.max(0, (e.clientX - r.left) / r.width)));
element.querySelectorAll(".bc-card[data-both]").forEach((c) => setCut(c, pct, true));
});
element.addEventListener("pointerout", (e) => {
if (e.target.closest(".bc-frame") && !(e.relatedTarget && e.relatedTarget.closest && e.relatedTarget.closest(".bc-frame"))) reset();
});
element.addEventListener("click", (e) => {
const btn = e.target.closest(".bc-toggle");
if (!btn) return;
sticky = !sticky;
btn.classList.toggle("bc-on", sticky);
btn.textContent = sticky ? "Gebogene Bilder zeigen" : "Alle ohne Eingriff zeigen";
reset();
});
watch("value", () => { sticky = false; reset(); });