The tiles.js
file is used to manage the visual “spotlight effect” experience on the article tiles found in the article/tiles.html
partial layout.
How it works #
This functionality is nearly identical to the
js/glossary.js
functionality – with the exception of the utilized class name, tile
If the page has elements with the tile
class, this script updates their background radial gradient values to mirror the position of the mouse.
The color of the spotlight effect is determined by css/colors.css
, specifically:
- inside:
var(--primary-gradient-color)
- outside:
var(--secondary-gradient-color)
Source code #
document.addEventListener("DOMContentLoaded", () => {
if (document.querySelectorAll(".tile")) {
const cards = document.querySelectorAll(".tile");
const positions = { x: 50, y: 50 }; // Default to center
function animate() {
cards.forEach((card) => {
const rect = card.getBoundingClientRect();
const mouseX = ((positions.x - rect.left) / rect.width) * 100;
const mouseY = ((positions.y - rect.top) / rect.height) * 100;
card.style.background = `radial-gradient(circle at ${mouseX}% ${mouseY}%, var(--primary-gradient-color), var(--secondary-gradient-color))`;
});
requestAnimationFrame(animate);
}
cards.forEach((card) => {
card.addEventListener("mousemove", (e) => {
// Update gradient position
positions.x = e.clientX;
positions.y = e.clientY;
});
card.addEventListener("mouseover", () => {
card.style.transform = "translateY(-10px) scale(1.05)";
card.style.boxShadow = "0 20px 30px #00000033";
});
card.addEventListener("mouseout", () => {
card.style.transform = "translateY(0) scale(1.0)";
card.style.boxShadow = "";
});
});
animate();
}
});