Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

180
Views
La etiqueta <template> no funciona con x-transition en Alpine.js

Tengo este código que funciona y la animación es agradable:

 <script src="https://unpkg.com/alpinejs@3.7.0/dist/cdn.min.js"></script> <div x-data="{ open: false }" x-on:click.outside="open = false" x-on:keydown.escape="open = false"> <button x-on:click="open = !open"> Click me </button> <div x-show="open" x-transition> <div> <ul> <li>Dogs</li> <li>Cats</li> <li>Snakes</li> </ul> </div> </div> </div>

Luego trato de usar la etiqueta <template> en lugar de la etiqueta <div> y cambio x-show a x-if (porque x-show no funciona con las etiquetas <template> en absoluto) así:

 <script src="https://unpkg.com/alpinejs@3.7.0/dist/cdn.min.js"></script> <div x-data="{ open: false }" x-on:click.outside="open = false" x-on:keydown.escape="open = false"> <button x-on:click="open = !open"> Click me </button> <template x-if="open" x-transition> <div> <ul> <li>Dogs</li> <li>Cats</li> <li>Snakes</li> </ul> </div> </template> </div>

puede alternar estados ocultos y mostrados, pero ninguna transición.

¿Alguna idea de cómo hacer que las etiquetas <template> admitan transiciones suaves de entrada/salida?

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

También enfrenté este problema, la única solución que encontré fue agregar los atributos x-data y x-init y alternar la variable para la directiva x-show dentro de una llamada $nextTick. Aquí hay un ejemplo:

 <script src="https://unpkg.com/alpinejs@3.7.0/dist/cdn.min.js"></script> <div x-data="{ open: false }" x-on:click.outside="open = false" x-on:keydown.escape="open = false"> <button x-on:click="open = !open"> Click me </button> <template x-if="open"> <div x-data="{ show: false }" x-init="$nextTick(() => { show = true })" x-show="show" x-transition> <ul> <li>Dogs</li> <li>Cats</li> <li>Snakes</li> </ul> </div> </template> </div>

about 4 years ago · Juan Pablo Isaza Report

0

Esto no funcionará como esperas. El motivo es que si desea utilizar una etiqueta <template> para ocultar esa sección en la carga de la página inicial con display: none (que es un comportamiento predeterminado), la transición aquí no funcionará. Alpinejs no lo admite.

A diferencia de x-show, x-if, NO admite cambios de transición con x-transition.

como se puede ver en su página oficial.

Debe continuar usando div y evitar la plantilla si desea una animación de transición. Ni siquiera funcionará así:

 <template x-if="open"> <div x-show="open" x-transition.duration.1500ms>

Pero, tal vez puedas probar algo como esto:

 <div x-data="{ open: false, animals: ['Animals'] }" x-on:click.outside="open = false" x-on:keydown.escape="open = false"> <button x-on:click="open = !open"> Click me </button> <template x-for="animal in animals"> <div x-show="open" x-transition.duration.1500ms> <ul> <li>Dogs</li> <li>Cats</li> <li>Snakes</li> </ul> </div> </template> </div>
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!