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

如何为animationend动画结束事件添加事件监听器替代setTimeout

修改步骤

1. 剥离原有setTimeout内的重置逻辑

先找到你现有resetPage函数里的setTimeout代码块,把里面所有页面重置的逻辑单独抽出来,删掉原有的定时器代码。
举个原来的代码示例参考:

// 旧的resetPage逻辑
function resetPage() {
  document.body.classList.add('fade-out'); // 触发淡出动画
  // 要删掉的定时器部分
  setTimeout(() => {
    // 这里是原有的重置逻辑:比如隐藏播放器、移除Exit按钮、恢复初始布局等
    document.querySelector('.video-player').style.display = 'none';
    document.querySelector('.exit-btn').remove();
    document.body.classList.remove('fade-out');
    // 其他你原来写的重置代码
  }, 600) // 和动画时长绑定的定时时间
}

2. 替换为animationend事件监听方案

修改后的resetPage代码如下,用事件监听代替定时器,自动捕获动画结束时机:

// 新的resetPage逻辑
function resetPage() {
  const bodyEl = document.body;
  // 先触发淡出动画
  bodyEl.classList.add('fade-out');

  // 动画结束后的处理函数
  function onFadeOutFinish(e) {
    // 可选:如果页面有多个动画,加判断确保只响应你的淡出动画,fadeOut换成你CSS里定义的动画名
    if (e.animationName !== 'fadeOut') return;

    // 把你原来写在setTimeout里的所有重置逻辑原封不动放到这里
    document.querySelector('.video-player').style.display = 'none';
    document.querySelector('.exit-btn').remove();
    bodyEl.classList.remove('fade-out');
    // 其他原有重置代码
  }

  // 给body绑定一次性动画结束监听,执行完自动销毁,不会重复触发
  bodyEl.addEventListener('animationend', onFadeOutFinish, { once: true });
}

3. 确认Exit按钮的点击绑定

确保你点击Exit按钮的回调是调用修改后的resetPage即可:

document.querySelector('.exit-btn').addEventListener('click', resetPage);

额外说明

如果你的淡出动画不是加在body元素上,只需要把上面代码里的监听对象换成你实际加动画的DOM元素即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:24:04