alpine.js 的 x-transition 指令仅支持与 x-show 配合使用,无法直接作用于 x-bind 触发的属性变更(如 src);要实现图片切换的过渡动画,需改用条件渲染 + x-show + x-transition 的组合方案。
在 Alpine.js 中,x-transition 的设计初衷是控制元素的显隐状态过渡,其底层依赖 x-show 对 display 样式的切换,并配合 CSS 类(如 enter, leave 等)实现动画。而 x-bind:src 仅更新 DOM 属性,不触发显示/隐藏的生命周期,因此直接在其上添加 x-transition 不会产生任何效果——这并非 Bug,而是指令职责的明确划分。
✅ 正确做法:用两个 元素分别代表“悬停态”和“默认态”,通过 x-show 控制其显隐,并为二者均添加 x-transition:
@@##@@
@@##@@
? 关键要点:
- 使用布尔状态(如 hover)驱动 x-show,而非数字索引(避免冗余逻辑);
- 两个 必须共存于同一容器内,且尺寸样式一致,确保视觉无缝切换;
- 显式声明 x-transition:* 参数可精准控制入场/离场动画(示例中使用淡入淡出,你也可替换为缩放、位移等);
- 若需更复杂的多图轮播,建议封装为组件或结合 x-for + 状态
管理,但务必仍以 x-show 为基础。
⚠️ 注意事项:
- 不要尝试对单个 同时绑定 x-bind:src 和 x-transition——它不会生效;
- 确保 Alpine.js 已正确加载(推荐使用 defer 加载);
- 过渡类名需与项目 CSS 框架(如 Tailwind)兼容;若自定义 CSS,需确保 transition 属性及关键帧定义完整。
通过这种结构化思路,你不仅能解决图片过渡问题,更能深入理解 Alpine.js 响应式指令的设计哲学:状态驱动视图,指令各司其职。

管理,但务必仍以 x-show 为基础。






