diff options
| author | William Hergès <william@herges.fr> | 2025-08-09 15:33:59 +0200 |
|---|---|---|
| committer | William Hergès <william@herges.fr> | 2025-08-09 15:33:59 +0200 |
| commit | 1c68d9c6e79214d366fa67c8ecbbccbc782b7b5c (patch) | |
| tree | 3a1efff7c7425a5486ec9c9e366a64128873926d /src/component/ImageBackground.astro | |
| parent | 05f09f1fb9e9a819cfecda26f47b3f53a022f9fd (diff) | |
feat(content): dynamic image list for bg
Diffstat (limited to 'src/component/ImageBackground.astro')
| -rw-r--r-- | src/component/ImageBackground.astro | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/component/ImageBackground.astro b/src/component/ImageBackground.astro index e69de29..9277472 100644 --- a/src/component/ImageBackground.astro +++ b/src/component/ImageBackground.astro @@ -0,0 +1,42 @@ +--- + +--- + +<div class="bg"> + <slot/> +</div> + +<script lang="js"> + document.querySelectorAll(".bg").forEach((e) => { + const children = e.children; + const max = e.clientWidth; + const height = e.hasAttribute("data-height") ? e.getAttribute("data-height") : 400; + const newChildren = []; + + let line = document.createElement("div"); + let currentWidth = 0; + let i = 0; + + const fn = () => { + let current = children[i++]; + let ratio = current.clientWidth / current.clientHeight; + line.appendChild(current.cloneNode(true)); + currentWidth += ratio * height; + } + + while (i < children.length) { + // adding elements + while (i < children.length && currentWidth <= max) fn() + if (i < children.length) fn() + // setting height + let h = (max * height) / currentWidth; + line.style.height = `${h}px`; + newChildren.push(line); + if (i < children.length) { + line = document.createElement("div"); + currentWidth = 0 + } + } + e.replaceChildren(...newChildren); + }); +</script> |
