0

0

CSS关键帧动画:实现图像分阶段路径移动——水平滑动后对角线移动教程

碧海醫心

碧海醫心

发布时间:2025-10-18 09:18:35

|

506人浏览过

|

来源于php中文网

原创

CSS关键帧动画:实现图像分阶段路径移动——水平滑动后对角线移动教程

本教程详细讲解如何利用css的`@keyframes`规则创建分阶段的复杂路径动画。我们将以一个具体的案例为例,演示如何让图像先从页面左侧中间位置水平滑动到屏幕中心,再从屏幕中心对角线滑动到屏幕左上角,并通过代码示例和注意事项,帮助读者掌握多阶段css动画的实现技巧。

理解CSS animation 与 @keyframes

CSS动画是网页交互设计中不可或缺的一部分。animation 属性是CSS3引入的一组用于创建动画的简写属性,它允许开发者为元素定义动画名称、持续时间、缓动函数、延迟、迭代次数和填充模式等。而 @keyframes 规则则是动画的核心,它定义了动画在不同时间点(或百分比)的样式状态。通过在 @keyframes 中设置 0% (动画开始)、100% (动画结束) 以及中间的任意百分比,我们可以精确控制元素在动画过程中的外观和位置变化。

实现分阶段动画的原理

要实现图像先水平滑动后对角线滑动的分阶段动画,我们需要在 @keyframes 中定义至少三个关键帧:

  1. 0% 关键帧: 定义动画的起始状态。在这个案例中,图像将位于页面左边缘的垂直中间位置。
  2. 50% 关键帧: 定义动画的中间状态。这个点既是第一阶段(水平滑动)的终点,也是第二阶段(对角线滑动)的起点。图像将位于屏幕的中心位置(其左上角)。
  3. 100% 关键帧: 定义动画的最终状态。图像将位于屏幕的左上角。

通过在这些关键帧中设置不同的 left 和 top 属性值,CSS动画引擎将自动计算并平滑过渡元素在这些状态之间的变化,从而创建出连续且分阶段的移动效果。

动画实现步骤与代码示例

1. HTML 结构

首先,我们需要一个用于动画的HTML元素。这里我们使用一个简单的 div 元素,并赋予它一个ID。

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

<div id="img1">图像内容</div>

2. CSS 样式定义

接下来,我们将为这个 div 元素定义基础样式和动画关键帧。

AdsGo AI
AdsGo AI

全自动 AI 广告专家,助您在数分钟内完成广告搭建、优化及扩量

下载
  • 基础样式:

    • position: absolute;:使元素可以自由定位。
    • display: block;:确保元素以块级形式显示。
    • top: 50%;:将元素的垂直起始位置设置为页面高度的50%,使其垂直居中
    • animation: image1 10s linear forwards;:应用名为 image1 的动画。
      • image1: 动画名称。
      • 10s: 动画持续时间为10秒。
      • linear: 动画速度曲线为线性,即匀速。
      • forwards: 动画结束后,元素将保持在动画的最终状态。这是实现分阶段动画并使其停留在最终位置的关键。
  • @keyframes 规则:

    • 0% { left: 0; top: 50%; transform: translateX(0); }:动画开始时,元素位于页面的最左侧边缘,垂直居中。transform: translateX(0) 在此是可选的,但可以明确声明 transform 属性的初始状态。
    • 50% { left: 50%; top: 50%; }:动画进行到50%时,元素移动到屏幕的中心点。请注意,这里的 left: 50%; top: 50%; 是指元素的左上角位于屏幕的中心。
    • 100% { left: 0; top: 0; }:动画结束时,元素移动到屏幕的左上角。

完整代码示例

将HTML和CSS结合,形成一个完整的示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS分阶段路径动画</title>
    <style>
        body {
            margin: 0;
            overflow: hidden; /* 防止滚动条出现,确保动画在视口内 */
            height: 100vh;
            width: 100vw;
            background-color: #f0f0f0;
        }

        #img1 {
            width: 100px; /* 示例图像宽度 */
            height: 100px; /* 示例图像高度 */
            background-color: royalblue; /* 示例图像背景色 */
            color: white;
            display: flex;
            justify-content: center;
            align-items: center;
            font-size: 1.2em;
            position: absolute;
            top: 50%; /* 元素垂直居中 */
            /* 动画属性 */
            animation: image1 10s linear forwards;
            /* 兼容性前缀,现代浏览器可能不再需要 */
            -webkit-animation: image1 10s linear forwards;
        }

        /* 定义动画关键帧 */
        @keyframes image1 {
            0% {
                left: 0;
                top: 50%; /* 确保动画开始时垂直居中 */
                transform: translateX(0);
            }
            50% {
                left: 50%;
                top: 50%;
            }
            100% {
                left: 0;
                top: 0;
            }
        }

        /* 兼容性前缀 */
        @-webkit-keyframes image1 {
            0% {
                left: 0;
                top: 50%;
                -webkit-transform: translateX(0);
                transform: translateX(0);
            }
            50% {
                left: 50%;
                top: 50%;
            }
            100% {
                left: 0;
                top: 0;
            }
        }
    </style>
</head>
<body>
    <div id="img1">IMAGE</div>
</body>
</html>

注意事项与优化

  1. 动画时长与缓动函数:
    • animation-duration (例如 10s) 可以调整动画的整体播放速度。
    • animation-timing-function (例如 linear) 定义动画的速度曲线。除了 linear,还有 ease (慢速开始,加速,慢速结束)、ease-in (慢速开始)、ease-out (慢速结束) 等,甚至可以使用 cubic-bezier() 自定义缓动曲线,以实现更自然的运动效果。
  2. animation-fill-mode: forwards 的重要性:
    • 这个属性确保动画结束后,元素会停留在 100% 关键帧定义的最终状态。如果没有 forwards,动画结束后元素会立即跳回其初始状态。
  3. 浏览器兼容性:
    • 在旧版浏览器中,可能需要为 animation 属性和 @keyframes 规则添加浏览器前缀,例如 -webkit- (Chrome, Safari)、-moz- (Firefox)、-o- (Opera) 等。在现代浏览器中,通常可以直接使用标准语法。
  4. 元素定位与居中:
    • 本教程中 top: 50%; left: 50%; 定位的是元素的左上角。如果需要元素自身的中心点位于屏幕中心,则需要结合 transform: translate(-50%, -50%);。例如,在 50% 关键帧中可以设置为 left: 50%; top: 50%; transform: translate(-50%, -50%);。在本案例中,当前实现方式符合题目要求,即元素的左上角到达指定位置。
  5. 多阶段动画的灵活性:
    • 你可以根据需要添加更多的关键帧(例如 25%, 75% 等)来创建更复杂的路径、增加动画的暂停效果或改变动画的速度。每个关键帧都可以定义不同的CSS属性。

总结

通过本教程,我们学习了如何利用CSS的 @keyframes 规则创建分阶段的复杂路径动画。通过精确定义动画在不同百分比时间点的样式状态,并结合 animation 属性的 forwards 模式,我们可以实现图像从一个位置平滑地移动到另一个位置,再按不同路径移动到最终位置的效果。掌握这一技术,将极大地增强你网页的动态表现力和用户体验。鼓励读者尝试不同的关键帧、属性组合和缓动函数,以探索CSS动画的无限可能性。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

1082

2023.08.11

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

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

851

2023.11.06

css3教程
css3教程

php中文网为大家提供css3教程合集,CSS3的语法是建立在CSS原先版本基础上的,它允许使用者在标签中指定特定的HTML元素而不必使用多余的class、ID或JavaScript。php中文网还为大家带来css3的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

429

2023.06.14

有哪些css3渐变属性
有哪些css3渐变属性

css3中渐变属性有linear-gradient、radial-gradient、conic-gradient、repeating-linear-gradient、repeating-radial-gradient等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

143

2023.11.01

function是什么
function是什么

function是函数的意思,是一段具有特定功能的可重复使用的代码块,是程序的基本组成单元之一,可以接受输入参数,执行特定的操作,并返回结果。本专题为大家提供function是什么的相关的文章、下载、课程内容,供大家免费下载体验。

500

2023.08.04

js函数function用法
js函数function用法

js函数function用法有:1、声明函数;2、调用函数;3、函数参数;4、函数返回值;5、匿名函数;6、函数作为参数;7、函数作用域;8、递归函数。本专题提供js函数function用法的相关文章内容,大家可以免费阅读。

167

2023.10.07

CSS position定位有几种方式
CSS position定位有几种方式

有4种,分别是静态定位、相对定位、绝对定位和固定定位。更多关于CSS position定位有几种方式的内容,可以访问下面的文章。

84

2023.11.23

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

90

2026.03.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

136

2026.03.12

热门下载

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

精品课程

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

共14课时 | 1.0万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.7万人学习

CSS教程
CSS教程

共754课时 | 43.9万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号