-
Notifications
You must be signed in to change notification settings - Fork 0
/
ImageScroller.svelte
54 lines (47 loc) 路 1.27 KB
/
ImageScroller.svelte
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<script lang="ts">
import { browser } from '$app/environment';
export let events;
export let selectedEvent;
export let eventName: string = 'BaselHack 23';
const selectEvent = (event) => {
selectedEvent = event;
};
const scrollToThumbnail = () => {
if (!browser) {
return;
}
const thumbnail = document.querySelector(`.thumbnail[src='${selectedEvent.url}']`);
if (!thumbnail) return;
thumbnail.scrollIntoView({ inline: 'center', behavior: 'smooth' });
};
$: {
if (selectedEvent && browser) {
scrollToThumbnail();
}
}
// $: selectedEvent, scrollToThumbnail();
</script>
<div class="bg-background w-full flex flex-col items-center pt-4 pb-4">
<div class="flex gap-2 overflow-x-scroll px-4">
{#each events as event}
<button on:click={() => selectEvent(event)} class="flex-shrink-0">
<img
class="thumbnail bg-gray-500 image-card rounded-md object-cover
{event === selectedEvent || event.starred ? 'border' : ''}"
style="border-color: {event === selectedEvent ? 'white' : event.starred ? '#FFCD29' : ''}"
alt="Thumbnail"
src={event.url}
/>
</button>
{/each}
</div>
<div class="text-center text-sm py-2 text-white">
{eventName}
</div>
</div>
<style>
.image-card {
height: 70px;
width: 48px;
}
</style>