mirror of
https://codeberg.org/vlw/vlw.se.git
synced 2025-09-13 21:13:40 +02:00
Replaces this section on the `/about` page:  with:  I will replace and fix the colors of the buttons after #15 is merged. Reviewed-on: https://codeberg.org/vlw/vlw.se/pulls/14
32 lines
No EOL
1 KiB
JavaScript
32 lines
No EOL
1 KiB
JavaScript
import { Elevent } from "/assets/js/modules/npm/Elevent.mjs";
|
|
|
|
export const TARGET_SELECTOR = "[data-hover]";
|
|
|
|
export class Hoverpop {
|
|
/**
|
|
* Bind hover targets on provided Elevent-compatible element(s)
|
|
* @param {HTMLElement|HTMLElements|string} elements
|
|
*/
|
|
constructor(elements) {
|
|
// Bind hover targets on element(s)
|
|
new Elevent("mouseenter", elements, (event) => {
|
|
const element = event.target.querySelector(TARGET_SELECTOR);
|
|
|
|
// Bail out if target element contains no hover target element
|
|
if (!element) {
|
|
return;
|
|
}
|
|
|
|
element.classList.add("hovering");
|
|
event.target.addEventListener("mousemove", (event) => {
|
|
const x = event.layerX - (element.clientWidth / 2);
|
|
const y = event.layerY + element.clientHeight;
|
|
|
|
element.style.setProperty("transform", `translate(${x}px, ${y}px)`);
|
|
});
|
|
});
|
|
|
|
// Bind hover leave targets on element(s)
|
|
new Elevent("mouseleave", elements, () => elements.forEach(element => element.querySelector(TARGET_SELECTOR)?.classList.remove("hovering")));
|
|
}
|
|
} |