<template> 标签不适用于 Alpine.js 中的 x-transition

Wod*_*dit 2 html javascript css alpine.js

我有这段代码可以工作,而且动画也很好:

<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>
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用<template>标签而不是<div>标签并更改x-showx-if(因为根本x-show不适用于标签),如下所示:<template>

<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>
Run Code Online (Sandbox Code Playgroud)

它可以切换隐藏和显示状态,但根本没有转换。

知道如何使<template>标签支持平滑的淡入/淡出过渡吗?

小智 5

我也遇到了这个问题,我找到的唯一解决方案是添加 x-data 和 x-init 属性,并在 $nextTick 调用内切换 x-show 指令的变量。这是一个例子:

<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>
Run Code Online (Sandbox Code Playgroud)

  • 不错,干得好。知道如何在点击或按 esc 键时淡出吗?现在只有淡入淡出的效果。淡出则不然。 (2认同)