feat(striscia): nomi fissi a sinistra, punti scorrono verso destra

- Layout ora usa CSS Grid (max-content 1fr) per allineare le colonne
  dei nomi indipendentemente dalla loro lunghezza
- I punti crescono da sinistra verso destra; un watcher Vue imposta
  scrollLeft al massimo ad ogni aggiornamento, mantenendo visibili
  gli ultimi punti a destra quando la striscia va oltre lo schermo
- Le celle vuote (spazio al posto del punto) non mostrano più
  lo sfondo giallo-verde (classe item-vuoto)
This commit is contained in:
2026-02-21 11:19:38 +01:00
parent 6bc74ab3e0
commit d1e8279608
2 changed files with 46 additions and 11 deletions

View File

@@ -90,15 +90,17 @@
</span> </span>
<div class="striscia" v-if="state.visuStriscia"> <div class="striscia" v-if="state.visuStriscia">
<div> <span class="striscia-nome text-bold">{{ state.sp.nomi.home }}</span>
<span class="text-bold mr1">{{ state.sp.nomi.home }}</span> <div class="striscia-items" ref="homeItems">
<div v-for="(h, i) in state.sp.striscia.home" :key="'sh'+i" class="item"> <div v-for="(h, i) in state.sp.striscia.home" :key="'sh'+i"
class="item" :class="{ 'item-vuoto': String(h).trim() === '' }">
{{ String(h) }} {{ String(h) }}
</div> </div>
</div> </div>
<div class="guest-striscia"> <span class="striscia-nome text-bold guest-striscia">{{ state.sp.nomi.guest }}</span>
<span class="text-bold mr1">{{ state.sp.nomi.guest }}</span> <div class="striscia-items guest-striscia" ref="guestItems">
<div v-for="(h, i) in state.sp.striscia.guest" :key="'sg'+i" class="item"> <div v-for="(h, i) in state.sp.striscia.guest" :key="'sg'+i"
class="item" :class="{ 'item-vuoto': String(h).trim() === '' }">
{{ String(h) }} {{ String(h) }}
</div> </div>
</div> </div>
@@ -190,6 +192,24 @@ export default {
this.ws = null this.ws = null
} }
}, },
watch: {
'state.sp.striscia.home': {
deep: true,
handler() {
this.$nextTick(() => {
if (this.$refs.homeItems) this.$refs.homeItems.scrollLeft = this.$refs.homeItems.scrollWidth
})
}
},
'state.sp.striscia.guest': {
deep: true,
handler() {
this.$nextTick(() => {
if (this.$refs.guestItems) this.$refs.guestItems.scrollLeft = this.$refs.guestItems.scrollWidth
})
}
}
},
methods: { methods: {
isMobile() { isMobile() {
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)

View File

@@ -135,20 +135,35 @@ button:focus-visible {
color: white color: white
} }
.striscia { .striscia {
position:fixed; position: fixed;
text-align: right;
bottom: 50px; bottom: 50px;
left: 10px;
right: 10px; right: 10px;
margin-left: -10000px; display: grid;
grid-template-columns: max-content 1fr;
row-gap: 2px;
align-items: center;
}
.striscia-nome {
white-space: nowrap;
padding-right: 6px;
}
.striscia-items {
display: flex;
flex-wrap: nowrap;
overflow: hidden;
} }
.striscia .item { .striscia .item {
width: 25px; width: 25px;
min-width: 25px;
text-align: center; text-align: center;
font-weight: bold; font-weight: bold;
display: inline-block; flex-shrink: 0;
border-radius: 5px;
}
.striscia .item:not(.item-vuoto) {
background-color: rgb(206, 247, 3); background-color: rgb(206, 247, 3);
color: blue; color: blue;
border-radius: 5px;
} }
.campo-config { .campo-config {