无 Jank 的 Tailwind / Alpine.js 手风琴

Posted

技术标签:

【中文标题】无 Jank 的 Tailwind / Alpine.js 手风琴【英文标题】:Jank-free Tailwind / Alpine.js accordion 【发布时间】:2021-12-26 09:55:45 【问题描述】:

我正在制作一个使用 Tailwind 和 Alpine.js (2.x) 的手风琴,但我似乎无法平滑过渡,它太笨拙了。

<link href="https://cdnjs.cloudflare.com/ajax/libs/tailwindcss/2.2.19/tailwind.min.css" rel="stylesheet"/>
<script src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.x.x/dist/alpine.min.js"></script>
        <ol class="max-w-sm p-4">
            <li class="pb-6 mb-6 border-b" x-data="isOpen : true ">
                <h3 class="flex text-2xl mb-6" :class=" 'mb-6': isOpen ">
                    <button class="text-left" type="button" @click="isOpen = !isOpen">
                    Heading 1
                    </button>
                </h3>
                <div x-show.transition.duration.300ms.origin.bottom="isOpen" @click.away="isOpen = false">
                    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Iure rerum in tempore sit ducimus doloribus quod commodi eligendi ipsam porro non fugiat nisi eaque delectus harum aspernatur recusandae incidunt quasi.</p>
                </div>
            </li>
            <li class="pb-6 mb-6 border-b" x-data="isOpen : false ">
                <h3 class="flex text-2xl mb-6" :class=" 'mb-6': isOpen ">
                    <button class="text-left" type="button" @click="isOpen = !isOpen">
                    Heading 2
                    </button>
                </h3>
                <div x-show.transition.duration.300ms.origin.bottom="isOpen" @click.away="isOpen = false">
                    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Iure rerum in tempore sit ducimus doloribus quod commodi eligendi ipsam porro non fugiat nisi eaque delectus harum aspernatur recusandae incidunt quasi.</p>
                </div>
            </li>      
        </ol>

关于如何使它更流畅的任何提示?

【问题讨论】:

【参考方案1】:

于 2022 年 1 月 6 日编辑

手风琴(以及其他组件)现在是官方AlpineJS documentation 的一部分。将它们用于完美的开箱即用手风琴。

原答案

关于平滑度的主要问题与mb-6 不转换有关。下面建议了一个快速修复(对孩子使用mt-6)。

<link href="https://cdnjs.cloudflare.com/ajax/libs/tailwindcss/2.2.19/tailwind.min.css" rel="stylesheet"/>
    <script src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.x.x/dist/alpine.min.js"></script>
            <ol class="max-w-sm p-4">
                <li class="pb-6 mb-6 border-b" x-data="isOpen : true ">
                    <h3 class="flex text-2xl">
                        <button class="text-left" type="button" @click="isOpen = !isOpen">
                        Heading 1
                        </button>
                    </h3>
                    <div class="mt-6" x-show.transition.duration.300ms.origin.bottom="isOpen" @click.away="isOpen = false">
                        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Iure rerum in tempore sit ducimus doloribus quod commodi eligendi ipsam porro non fugiat nisi eaque delectus harum aspernatur recusandae incidunt quasi.</p>
                    </div>
                </li>
                <li class="pb-6 mb-6 border-b" x-data="isOpen : false ">
                    <h3 class="flex text-2xl">
                        <button class="text-left" type="button" @click="isOpen = !isOpen">
                        Heading 2
                        </button>
                    </h3>
                    <div class="mt-6" x-show.transition.duration.300ms.origin.bottom="isOpen" @click.away="isOpen = false">
                        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Iure rerum in tempore sit ducimus doloribus quod commodi eligendi ipsam porro non fugiat nisi eaque delectus harum aspernatur recusandae incidunt quasi.</p>
                    </div>
                </li>      
            </ol>

但是,流畅度仍然不是很好。为了实现一些漂亮和酷的东西,不要使用 AlpineJS 中的过渡属性和 x-show,而是使用 Transition 类并使用 Tailwind 中的 max-height。您在AlpineToolbox 中引用了一个很好的示例here。

【讨论】:

谢谢,您链接到的示例是我经过一些调整后所追求的。 ?

以上是关于无 Jank 的 Tailwind / Alpine.js 手风琴的主要内容,如果未能解决你的问题,请参考以下文章

APP&游戏需要关注Jank卡顿吗?

如何修复 GridView 和 AnimationBuilder 中的 Jank?

perfdog使用手册

Android UI性能专项测试及优化

Android UI性能专项测试及优化

Tailwind.css — 如何使用 Tailwind 实现 last-child?