You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Svelte中使用View Transition API出现闪烁问题求助

View Transition API 缩放动画闪烁问题

我在使用View Transition API实现缩放动画时遇到了闪烁问题,不清楚原因。我仅需实现一个缩放动画,尝试过await svelte tick()但问题依旧。

以下是完整代码:

<script lang="ts">
    let seeking = $state(false);

    function seek() {
        document.startViewTransition(() => {
            seeking = true
        });
    }

    function cancelSeek() {
        document.startViewTransition(() => {
            seeking = false
        });
    }
</script>

<div class="rounded-lg border border-yellow-400/20 min-w-150">
    <div class={['quick-game overflow-hidden', { seeking }]}>
        <div class="relative rounded-lg p-4 [view-transition-name:quick-game-content]">
            {#if seeking}
                <div class="grid items-center gap-4">
                    <p>Seeking game...</p>
                    <p>3+0</p>
                    <p>Blitz</p>
                    <p>Active players: 69420</p>
                    <button class="rounded-lg bg-yellow-600 p-2 py-1 text-black" onclick={cancelSeek}>cancel seek</button>
                </div>
            {:else}
                <div class="grid grid-cols-[repeat(auto-fill,minmax(10rem,1fr))] gap-4">
                    {#each Array.from({ length: 12 }) as _, i}
                        <button
                            class="flex h-full items-center justify-center gap-1 rounded-lg border-2 border-yellow-400 bg-yellow-600/10 p-2 text-xl tracking-wide text-primary transition duration-100 ease-in-out hover:bg-yellow-600/20 hover:text-yellow-400 active:bg-yellow-600/30"
                            onclick={seek}
                        >
                            <div class="flex flex-1 flex-col gap-2 text-start">
                                <p>{i+1}+0</p>
                                <p>Blitz</p>
                            </div>
                            <span>🤓</span>
                        </button>
                    {/each}
                </div>
            {/if}
        </div>
    </div>
</div>

<style>
    ::view-transition-old(quick-game-content) {
        animation: scale-out 2s ease-in-out;
    }
    ::view-transition-new(quick-game-content) {
        animation: scale-in 2s ease-in-out;
    }

    @keyframes scale-in {
        from {
            scale: 0;
            opacity: 0;
        }
        to {
            scale: 1;
            opacity: 1;
        }
    }

    @keyframes scale-out {
        from {
            scale: 1;
            opacity: 1;
        }
        to {
            scale: 0;
            opacity: 0;
        }
    }
</style>

注:屏幕录制无法捕捉到闪烁,手动录制了两种状态的动画视频:正常动画、2秒慢放动画。

内容的提问来源于stack exchange,提问作者dankobgd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 13:05:01