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

Svelte 3.55:过渡动画开始时如何立即切换CSS类?

解决方案

直接通过响应式状态控制Dimmer的点击事件权限,无需依赖过渡事件或延迟的类添加:

方案一:动态样式绑定(推荐)

移除所有isFading相关逻辑,用style:pointer-events直接绑定isOpen状态,在侧栏开始关闭的瞬间立即禁用Dimmer的点击事件:

<script lang="ts">
  import { fade } from 'svelte/transition'
  import { isSidebarOpen, toggleSidebar } from '../state'

  let isOpen: boolean = false

  isSidebarOpen.subscribe((value) => (isOpen = value))
</script>

<div class="sidebar">
  {#if isOpen}
    <div
      class="sidebar__dimmer"
      on:click={toggleSidebar}
      style:pointer-events={isOpen ? 'all' : 'none'}
      transition:fade={{ duration: 500 }}
    />
  {/if}
  <div>Lorem ipsum dolor sit amet</div>
</div>

<style lang="scss" scoped>
  .sidebar {
    z-index: 9999;
    position: fixed;
    inset: 0;
    display: flex;
    overflow: hidden;
    pointer-events: none;

    &__dimmer {
      position: absolute;
      inset: 0;
      /* 移除原有的pointer-events: all,由动态样式接管 */
    }
  }
</style>

原理

当isOpen从true切换为false时,响应式样式绑定会立即将pointer-events设为none,Dimmer瞬间失去点击交互能力,完全避免了动画过程中的误触问题,比依赖outrostart事件更高效。

方案二:即时类绑定

如果坚持使用类的方式,直接将isFading类与!isOpen状态绑定,状态变化时类会立即生效:

<script lang="ts">
  import { fade } from 'svelte/transition'
  import { isSidebarOpen, toggleSidebar } from '../state'

  let isOpen: boolean = false

  isSidebarOpen.subscribe((value) => (isOpen = value))
</script>

<div class="sidebar">
  {#if isOpen}
    <div
      class="sidebar__dimmer"
      class:isFading={!isOpen}
      on:click={toggleSidebar}
      transition:fade={{ duration: 500 }}
    />
  {/if}
  <div>Lorem ipsum dolor sit amet</div>
</div>

<style lang="scss" scoped>
  .sidebar {
    z-index: 9999;
    position: fixed;
    inset: 0;
    display: flex;
    overflow: hidden;
    pointer-events: none;

    &__dimmer {
      position: absolute;
      inset: 0;
      pointer-events: all;
    }

    &__dimmer.isFading {
      pointer-events: none;
    }
  }
</style>

原理

!isOpen的状态变化会触发类的即时更新,无需等待过渡事件,彻底解决类添加延迟的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:39:58