Navigation

ScrollTop

Pulsante torna-su che appare quando la pagina supera un certo scroll threshold. Configurabile per target window o elemento parent, comportamento smooth/auto, severity e aspetto del pulsante.

Import

import { ScrollTop } from '@pzeta/vue-components'

Esempio Base

Props

PropTipoDefaultDescrizione
target'window' | 'parent''window'Target per l'ascolto degli eventi di scroll. 'window' ascolta la finestra; 'parent' cerca il genitore scrollable
containerstring | nullnullSelettore CSS di uno specifico container scrollabile da osservare e a cui legare lo scroll. Se valorizzato ha precedenza su target e consente più istanze indipendenti su container distinti
position'fixed' | 'absolute''fixed'Posizionamento del pulsante: fixed (rispetto al viewport) o absolute (rispetto all'antenato posizionato — utile dentro un container)
thresholdnumber400Pixel di scroll necessari per mostrare il pulsante
iconstringundefinedClasse CSS dell'icona (default: icona configurata in ConfigPlugin)
behavior'smooth' | 'auto''smooth'Comportamento dello scroll al click
severitySeverity'primary'Stile del pulsante (primary, secondary, success, info, warn, danger, help, contrast)
raisedbooleantrueAggiunge ombra al pulsante
roundedbooleantrueRende il pulsante circolare

Emits

EventoPayloadDescrizione
clickMouseEventEmesso quando il pulsante viene cliccato

Slot

SlotScopeDescrizione
iconTemplate personalizzato per l'icona del pulsante

Esempi

Configurazione base

Diversi stili severity

Pulsante non circolare

Senza ombra

Con icona personalizzata tramite prop

Con slot icona personalizzata

Target parent (container scrollabile)

In un container scrollabile dedicato

Con container (selettore CSS) il pulsante osserva uno specifico riquadro scrollabile; position="absolute" lo ancora all'antenato posizionato così resta dentro l'area del container. È il pattern consigliato per avere più istanze indipendenti nella stessa pagina.

Ascolto evento click

Comportamento

  • Il pulsante è posizionato di default in modo fisso (fixed) in basso a destra (bottom-6 right-6). Con position="absolute" viene ancorato all'antenato posizionato più vicino (utile dentro un container).
  • Con target: 'window' ascolta window.scrollY; con target: 'parent' cerca il primo genitore con overflow-y: auto o scroll tramite attributo data-scrolltop-container.
  • La prop container (selettore CSS) ha precedenza su target: lega il pulsante a uno specifico riquadro scrollabile e permette più istanze indipendenti nella stessa pagina.
  • L'apparizione/scomparsa usa una transizione animata (fade + translate + scale).
  • L'icona di default è configurata tramite ConfigPlugin (icons.navigation.scrollTop); la prop icon permette di sovrascriverla.

Accessibilità

  • Il pulsante ha aria-label gestito tramite @pzeta/vue-i18n (navigation.scrollToTopAriaLabel).
  • L'evento scroll viene registrato con { passive: true } per ottimizzare le performance.

TypeScript

import type { ScrollTopProps, ScrollTopEmits, ScrollTopSlots } from '@pzeta/vue-components'