@@ -5,8 +5,77 @@ const title = "Fylgja";
5
5
6
6
<Layout title ={ title } hideSearch ={ true } >
7
7
<h1 >{ title } </h1 >
8
+
9
+ <css-snap-slider>
10
+ <div
11
+ data-track
12
+ class =" snap scroll-x grid grid-flow gap flow-unset"
13
+ style =" --md_grid-cols: 2; --md_gap: 4rem;"
14
+ >
15
+ <figure class =" stack align" style =" --align-items: end center;" >
16
+ <img src =" https://picsum.photos/id/19/2200/575" width =" 2200" height =" 575" >
17
+ <figcaption style =" --px: var(--size-4)" >Fylgja CSS Slider</figcaption >
18
+ </figure >
19
+ <img src =" https://picsum.photos/id/34/2200/575" width =" 2200" height =" 575" >
20
+ <img src =" https://picsum.photos/id/42/2200/575" width =" 2200" height =" 575" >
21
+ <img src =" https://picsum.photos/id/72/2200/575" width =" 2200" height =" 575" >
22
+ <img src =" https://picsum.photos/id/94/2200/575" width =" 2200" height =" 575" >
23
+ </div >
24
+ <button data-next hidden >➡️</button >
25
+ <button data-prev hidden >⬅️</button >
26
+ </css-snap-slider>
8
27
</Layout >
9
28
29
+ <script >
30
+ // @ts-nocheck
31
+ class CssSnapSlider extends HTMLElement {
32
+ constructor() {
33
+ self = super();
34
+ }
35
+
36
+ connectedCallback() {
37
+ const track = self.querySelector('[data-track]');
38
+ const prevBtn = self.querySelector('[data-prev]');
39
+ const nextBtn = self.querySelector('[data-next]');
40
+
41
+ const activeSliderObserver = new IntersectionObserver((entries, observer) => {
42
+ entries.forEach(entry => {
43
+ const slide = entry.target;
44
+
45
+ if (entry.isIntersecting) {
46
+ // Add the `data-active` attribute when the slide is in view
47
+ slide.setAttribute('data-active', 'true');
48
+ } else {
49
+ // Remove the `data-active` attribute when the slide is out of view
50
+ slide.removeAttribute('data-active');
51
+ }
52
+ });
53
+ }, {
54
+ root: null, // Use the viewport as the root
55
+ threshold: 0.5, // Slide is considered "in view" when 50% of it is visible
56
+ });
57
+
58
+ if (!track) {
59
+ console.error('No Slider track defined');
60
+ return;
61
+ }
62
+
63
+ Array.from(track.children).forEach(slide => activeSliderObserver.observe(slide));
64
+
65
+ if (prevBtn) {
66
+ prevBtn.removeAttribute('hidden');
67
+ }
68
+
69
+ if (nextBtn) {
70
+ nextBtn.removeAttribute('hidden');
71
+ }
72
+ }
73
+ }
74
+
75
+ customElements.define("css-snap-slider", CssSnapSlider);
76
+ </script >
77
+
78
+
10
79
<style is:global >
11
80
.page-header {
12
81
--page-header-bg: transparent;
0 commit comments