当前位置: 首页 > article >正文

【愚公系列】《循序渐进Vue.js 3.x前端开发实践》039-使用JavaScript的方式实现动画效果

标题详情
作者简介愚公搬代码
头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
近期荣誉2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主,2024年华为云十佳博主等。
博客内容.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
欢迎👍点赞、✍评论、⭐收藏

文章目录

  • 🚀前言
  • 🚀一、使用JavaScript的方式实现动画效果
    • 🔎1. HTML 部分
      • 🦋1.1 关键点
    • 🔎2. Vue 部分
      • 🦋2.1 响应式数据:`width` 和 `height`
      • 🦋2.2 `run` 方法:启动动画
      • 🦋2.3 `animation` 方法:更新宽度和高度
      • 🦋2.4 返回响应式数据和方法
    • 🔎3. 动画效果
      • 🦋3.1 动态样式绑定
      • 🦋3.2 点击触发动画
      • 🦋3.3 动画过程
    • 🔎4. 总结


🚀前言

在现代网页开发中,动画效果不仅能够提升用户体验,还能够为网站增添活力和趣味。虽然 CSS 动画因其简单易用而被广泛应用,但有时我们需要更复杂的动画效果,这时 JavaScript 就成为了不可或缺的工具。通过 JavaScript,我们可以实现更为灵活和自定义的动画效果,控制动画的每一个细节。

本篇文章将深入探讨如何使用 JavaScript 创建动画效果。我们将介绍基础的 DOM 操作,结合 requestAnimationFrame 方法来实现平滑的动画过渡。文章中将涵盖如何通过 JavaScript 控制元素的样式变化、运动轨迹、动画时长,以及如何处理动画的暂停、恢复和结束事件。

🚀一、使用JavaScript的方式实现动画效果

🔎1. HTML 部分

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    <title>JS动画</title>
</head>
<body>
    <div id="Application">  
        <div :style="{backgroundColor: 'blue', width: width + 'px', height:height + 'px'}" @click="run">
        </div>
    </div>
    <script>
        /* Vue 代码 */
    </script>
</body>
</html>

在这里插入图片描述

🦋1.1 关键点

  • <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>:引入 Vue 3 的全局脚本。
  • <div id="Application">:Vue 应用将挂载在这个 div 上。
  • :style:使用 Vue 的绑定语法将动态样式绑定到 div 上,背景色是蓝色,宽度和高度是响应式的,通过 widthheight 来动态更新。
  • @click="run":点击 div 元素时,触发 run 方法来开始动画。

🔎2. Vue 部分

const { createApp, ref } = Vue;

const App = createApp({
    setup() {
        // 定义响应式数据
        const width = ref(100);
        const height = ref(100);
        let timer = null;

        // run 方法:启动动画
        const run = () => {
            // setInterval 每 10 毫秒执行一次 animation 函数
            timer = setInterval(animation, 10);
        };

        // animation 方法:控制宽度和高度的变化
        const animation = () => {
            // 当宽度达到 200px 时,停止动画
            if (width.value == 200) {
                clearInterval(timer);
                return;
            } else {
                // 否则,增加宽度和高度
                width.value += 1;
                height.value += 1;
            }
        };

        // 返回响应式数据和方法,供模板使用
        return { width, height, run };
    }
});

App.mount("#Application");

🦋2.1 响应式数据:widthheight

const width = ref(100);
const height = ref(100);
  • ref 是 Vue 3 的响应式 API,用来创建响应式的数据。
  • widthheight 的初始值分别为 100,表示 div 元素的初始宽度和高度。

🦋2.2 run 方法:启动动画

const run = () => {
    timer = setInterval(animation, 10);
};
  • run 方法通过 setInterval 每 10 毫秒执行一次 animation 方法,从而实现动画的逐步更新。
  • setInterval 是 JavaScript 中的定时器函数,它接受两个参数:一个函数和时间间隔(以毫秒为单位)。每 10 毫秒就调用一次 animation

🦋2.3 animation 方法:更新宽度和高度

const animation = () => {
    if (width.value == 200) {
        clearInterval(timer);
        return;
    } else {
        width.value += 1;
        height.value += 1;
    }
};
  • animation 方法控制 div 元素的宽度和高度逐渐增加:
    • 每次调用时,width.valueheight.value 增加 1。
    • width.value 达到 200 时,调用 clearInterval(timer) 停止定时器,结束动画。

🦋2.4 返回响应式数据和方法

return { width, height, run };
  • setup 函数中,返回了 widthheightrun,这些可以在模板中直接使用。这样 Vue 会自动将这些值绑定到组件的模板中。

🔎3. 动画效果

🦋3.1 动态样式绑定

<div :style="{backgroundColor: 'blue', width: width + 'px', height:height + 'px'}" @click="run"></div>
  • :style 是 Vue 中的动态绑定语法,用于绑定 CSS 样式。这里的绑定设置了:
    • backgroundColor: 'blue':背景色始终为蓝色。
    • width: width + 'px':宽度是响应式的,初始值为 100px,点击后会逐渐增加。
    • height: height + 'px':高度是响应式的,初始值为 100px,点击后会逐渐增加。

🦋3.2 点击触发动画

  • 当用户点击 div 时,会触发 run 方法,启动动画。
  • run 方法调用 setInterval 来每 10 毫秒调用一次 animation,使得 div 的宽度和高度逐渐增大,直到宽度和高度都达到 200px。

🦋3.3 动画过程

  1. 页面加载时,div 元素的宽度和高度为 100px,背景色为蓝色。
  2. 当点击 div 时,run 方法会被触发,定时器开始每 10 毫秒执行一次 animation 方法。
  3. animation 方法中,widthheight 的值每次增加 1,直到它们的值都达到 200px。
  4. 当宽度达到 200px 时,clearInterval(timer) 停止定时器,动画停止。

🔎4. 总结

这段代码通过 Vue 3 实现了一个简单的 JavaScript 动画效果,点击 div 时,元素的宽度和高度逐渐增加,直到达到指定的 200px。主要实现方式如下:

  • 使用 Vue 的 ref 来创建响应式数据 widthheight
  • 使用 setInterval 实现每 10 毫秒更新一次 widthheight,从而逐步改变元素的大小。
  • 使用 Vue 的动态样式绑定来实时更新 div 的宽度和高度。
  • 当宽度达到 200px 时,清除定时器,停止动画。

这种方式是通过 JavaScript 控制动画的常见做法,利用 Vue 的响应式系统和定时器来实现平滑的动画效果。


http://www.kler.cn/a/527342.html

相关文章:

  • 随笔 | 写在一月的最后一天
  • UE5 特效
  • C++ 堆栈分配的区别
  • 机器学习2 (笔记)(朴素贝叶斯,集成学习,KNN和matlab运用)
  • 留学生scratch计算机haskell函数ocaml编程ruby语言prolog作业VB
  • 模型I/O功能之模型包装器
  • 10.4 LangChain核心架构揭秘:模块化设计如何重塑大模型应用开发?
  • SpringBoot AOP 和 事务
  • AI应用部署——streamlit
  • 基于Rectified Flow FLUX的图像编辑方法 RF-Solver
  • 17.2 图形绘制5
  • Streamlit入门
  • 04树 + 堆 + 优先队列 + 图(D1_树(D2_二叉树(BT)(D2_刷题练习)))
  • “星门计划对AI未来的意义——以及谁将掌控它”
  • Ethflow Round 1 (Codeforces Round 1001, Div. 1 + Div. 2)(A,B,C,E1)
  • hot100(4)
  • 对比DeepSeek、ChatGPT和Kimi的学术写作关键词提取能力
  • Baklib推动企业知识管理创新与效率提升的全面探讨
  • 计算机网络 性能指标相关
  • Python——基本数据类型——字符串类型
  • 代码随想录刷题day20|(哈希表篇)15.三数之和
  • 机器学习6-全连接神经网络2
  • 基于改进的强跟踪技术的扩展Consider Kalman滤波算法在无人机导航系统中的应用研究
  • 使用 Ollama 和 Kibana 在本地为 RAG 测试 DeepSeek R1
  • LeetCode 0541.反转字符串 II:模拟
  • C# 数组和列表的基本知识及 LINQ 查询