Ir al contenido

Affix

Hace que un elemento se fije al viewport al desplazarse. Útil para navegación, barras de herramientas o botones de acción.

import { Affix } from 'asterui'

Affix Básico

El elemento se fija cuando se desplaza más allá de su posición.

import { Affix, Button } from 'asterui'

function App() {
  return (
      <Affix offsetTop={80}>
        <Button color="primary">Affixed Button</Button>
      </Affix>
    )
}

export default App

Con Callback

Recibe notificaciones cuando cambia el estado del affix.

import { Affix, Button } from 'asterui'
import { useState } from 'react'

function App() {
  const [affixed, setAffixed] = useState(false)
  
  return (
      <Affix offsetTop={80} onChange={setAffixed}>
        <Button type={affixed ? 'primary' : 'neutral'}>
          {affixed ? 'Affixed!' : 'Not Affixed'}
        </Button>
      </Affix>
    )
}

export default App

Affix al Fondo

Fija el elemento al fondo del viewport.

import { Affix, Button } from 'asterui'

function App() {
  return (
      <Affix offsetBottom={20}>
        <Button color="secondary">Bottom Affixed</Button>
      </Affix>
    )
}

export default App

Objetivo Personalizado

Affix dentro de un contenedor desplazable.

Sticky Header
import { Affix } from 'asterui'

function App() {
  return (
      <div id="scroll-container" className="h-64 overflow-auto">
        <Affix offsetTop={0} target={() => document.getElementById('scroll-container')!}>
          <div className="bg-primary text-primary-content p-2">
            Sticky Header
          </div>
        </Affix>
        {/* Scrollable content */}
      </div>
    )
}

export default App
PropiedadDescripciónTipoPredeterminado
childrenContenido para hacer fijoReact.ReactNode-
offsetTopDesplazamiento desde arriba cuando está fijo (píxeles)number-
offsetBottomDesplazamiento desde abajo cuando está fijo (píxeles)number-
targetElemento objetivo de desplazamiento() => HTMLElement | Window-
onChangeCallback cuando cambia el estado del affix(affixed: boolean) => void-
classNameClases CSS adicionalesstring-
  • Usa CSS position: sticky para mejor rendimiento
  • No atrapa el foco del teclado cuando está fijado
  • El contenido permanece en el flujo del documento cuando no está fijado