讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在页面跳转前完成 CSS 动画(阻止 href 立即重定向)

轻墨君_2031

轻墨君_2031

发布时间:2026-01-15 18:26:07

|

139人浏览过

|

来源于php中文网

原创

如何在页面跳转前完成 CSS 动画(阻止 href 立即重定向)

点击链接时,浏览器默认会立即触发跳转,导致动画来不及播放。解决方法是拦截默认行为,在动画结束后手动执行重定向,确保视觉过渡流畅完成。

在 Web 开发中,为提升用户体验,常需在页面跳转前添加平滑的 CSS 动画(如 Logo 缩放、菜单位移等)。但直接在 <a> 标签中使用 href 属性时,浏览器会在 onclick 函数执行的同时或之前就启动导航,导致 animate() 这类异步动画被中断或完全跳过。

根本原因在于:href 的跳转是同步且高优先级的 DOM 行为,而 Element.animate() 返回的是一个 Animation 对象,其播放是异步的——它不会阻塞主线程,也不会等待动画结束才继续执行后续 JS 逻辑(包括跳转)。

✅ 正确解法:阻止默认跳转 → 执行动画 → 动画完成后再手动跳转

以下是推荐实现方式(基于现代浏览器兼容性,无需 polyfill):

jm-jsjkxyjs02-pzl-803
jm-jsjkxyjs02-pzl-803

查询全球任意城市的实时天气和未来天气预报

下载

立即学习“前端免费学习笔记(深入)”;

✅ 推荐方案:使用 animation.onfinish + e.preventDefault()

<a href="{% url 'Portfolio' %}" class="base-button" onclick="move(event, this)">Portfolio</a>
function move(e, linkElement) {
  e.preventDefault(); // 关键:阻止默认跳转

  const logo = document.getElementById("Logo");
  const menu = document.getElementById("Menu");

  // 执行 Logo 动画
  const logoAnim = logo.animate([
    { left: '50vw', top: '25vh' },
    { left: '5vw',  top: '7.5vh' }
  ], { duration: 1000 });

  // 执行 Menu 动画
  const menuAnim = menu.animate([
    { left: '50vw', top: '40vh', width: '10vw' },
    { left: '0vw',  top: '5vh',  width: '7.5vw' }
  ], { duration: 1000 });

  // 同步设置最终样式(避免动画结束后回弹)
  logo.style.left = "5vw";
  logo.style.top  = "7.5vh";
  menu.style.left = "0vw";
  menu.style.top  = "5vh";
  menu.style.width = "7.5vw";

  // ⚠️ 关键:监听所有动画完成后再跳转
  Promise.all([
    logoAnim.finished,
    menuAnim.finished
  ]).then(() => {
    window.location.href = linkElement.href; // 安全跳转
  });
}

? 补充说明与注意事项

  • 不要用 return false 替代 e.preventDefault():虽然 onclick="move(); return false" 能阻止跳转,但它会同时阻止事件冒泡且语义模糊;e.preventDefault() 更精准、可维护性更强。
  • 避免 setTimeout 硬编码延迟:如 setTimeout(() => location.href = ..., 1000) 不可靠——若动画被用户系统性能影响或 CSS animation-duration 变更,易出现跳转早于动画结束的问题。
  • .finished 是 Promise:Animation.finished 返回一个在动画自然结束(含完成、取消、填充模式生效)时 resolve 的 Promise,比轮询 animation.playState 更优雅。
  • 兼容性提示:Animation.finished 在 Chrome 46+、Firefox 48+、Edge 79+、Safari 16.4+ 中原生支持;如需支持旧版 Safari,可降级使用 animation.onfinish 事件回调(注意:该事件不触发于被 cancel() 的动画)。

✅ 最终效果

用户点击「Portfolio」链接后:

  1. 页面不立即跳转;
  2. Logo 与菜单同步执行 1 秒位移缩放动画;
  3. 动画完全结束后,自动跳转至 {% url 'Portfolio' %} 对应路由;
  4. 整个过程无闪烁、无回弹、过渡自然。

此方案兼顾语义清晰性、可维护性与跨浏览器稳定性,是实现“带动画的 SPA 式导航”的标准实践之一。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

2466

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4359

2023.11.06

Chrome开启无痕模式
Chrome开启无痕模式

本专题整合了Chrome无痕模式开启相关内容,阅读专题下面的文章了解更多详细教程。

3107

2026.03.24

edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

2762

2023.08.21

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2234

2024.03.05

如何解决Edge打开但没有标题的问题
如何解决Edge打开但没有标题的问题

若 Microsoft Edge 浏览器打开后无标题(窗口空白或标题栏缺失),可尝试以下方法解决: 重启 Edge:关闭所有窗口,重新启动浏览器。 重置窗口布局:右击任务栏 Edge 图标 → 选择「最大化」或「还原」。 禁用扩展:进入 edge://extensions 临时关闭插件测试。 重置浏览器设置:前往 edge://settings/reset 恢复默认配置。 更新或重装 Edge:检查最新版本,或通过控制面板修复

2652

2025.04.24

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

3518

2023.08.10

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

3796

2023.06.20

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

20

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 1.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 5.6万人学习

CSS教程
CSS教程

共754课时 | 93.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn