【Anime.js】——用Anime.js实现动画效果

【Animejs教程】一个绝赞易用的动画库 Animejs,一个绝好的threejs动画辅助库 前端动画库 animejs 使用教程 阅读详情

目录

目标:

​编辑1、确定思路

 2、创建网格

 3、设置随机位置

4、创建时间轴动画

完整代码:


目标:

实现自动选点,对该点进行先缩小后放大如何回到比其他点大一点的状态,并以该点从外向内放大

1、确定思路

 2、创建网格

知识点:

createDocumentFragment()方法:

是用来创建一个虚拟的节点对象,或者说,是用来创建文档碎片节点。它可以包含各种类型的节点,在创建之初是空的。

当需要添加多个dom元素时,如果先将这些元素添加到DocumentFragment中,再统一将DocumentFragment添加到页面,会减少页面渲染dom的次数,效率会明显提升。 

 效果:

 3、设置随机位置

知识点:

anime.stagger——交错动画

anime.stagger(value, options)
//options 是一个对象类型:
    from: startingPosition  ————从哪里开始
    direction: '反向'  ————运动反向
    grid: [rows, columns]  ————网格


anime.stagger(value, {grid: [rows, columns], axis: 'x'})
//axis设置为x,表示将一整行设置为整体
//设为y,会将一整列设置为整体


//例如:
delay: anime.stagger(200, {grid: [14, 5], from: 'center'})

index:设置随机的起始点

使用anime.set方法给小红点cursor设置移动位置

 效果:

4、创建时间轴动画

(1)先实现红色小圆点的动画效果

用keyframes表示帧动画,用数组接收,每一帧是一个对象。

设置时间轴:
anime.timeline.add(parameters, offset);
//parameters 动画相关的参数————对象类型
//offset 时间偏移量————字符串或者数字类型
        // 字符串类型表示相对时间偏移,数字类型表示绝对偏移量

效果:

(2)实现边上的白点动态效果

targets目标为小白点

 (3)融合两个点的效果

这两个点不是同时执行的,要让他们有一个交错的效果,给第二个动画设置delay。

第二个动画不是等到第一个动画结束才开始,是在整个时间轴执行30ms之后开始的,设置Number类型的时间偏移量。

 效果:

(4)创建第3个动画,让红色的圆点继续向下平移

 (5)让小点一直运动

现在看到的效果就是,它运动完一个点,跑到下一个点的时候就停止了,我们如何让他一直是动态的呢?没错,我们需要循环。

完整代码:

<!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">
    <title>Document</title>
    <style>
        body {
            background-color: #F6F4F2;
            color: #252423;
        }

        body {
            display: flex;
            justify-content: center;
            align-items: center;
            position: absolute;
            width: 100%;
            height: 100vh;
        }

        .animation-wrapper {
            width: 80%;
            padding-bottom: 40%;
        }

        .stagger-visualizer {
            position: absolute;
            width: 1100px;
            height: 550px;
            transform-origin: left top;
        }

        .stagger-visualizer .dots-wrapper {
            transform: translateZ(0);
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            display: flex;
            flex-wrap: wrap;
            justify-content: center;
            align-items: center;
        }

        .stagger-visualizer .dot {
            position: relative;
            z-index: 1;
            width: 23px;
            height: 23px;
            margin: 16px;
            background-color: currentColor;
            border-radius: 50%;
        }

        @media (min-width: 740px) {
            .stagger-visualizer .dot {
                background-color: transparent;
                background-image: linear-gradient(180deg, #FFFFFF 8%, #D3CDC6 100%);
            }
        }

        .stagger-visualizer .cursor {
            position: absolute;
            top: 0px;
            left: 0px;
            width: 37px;
            height: 37px;
            margin: 9px;
            background-color: currentColor;
            border-radius: 50%;
        }
    </style>
</head>

<body>
    <div class="animation-wrapper">
        <div class="stagger-visualizer">
            <div class="cursor color-red"></div>
            <div class="dots-wrapper"></div>
        </div>
    </div>
    <script src="../node_modules/animejs/lib//anime.min.js"></script>
    <script>
        function fitElementToParent(el, padding) {
            var timeout = null;
            function resize() {
                if (timeout) clearTimeout(timeout);
                anime.set(el, { scale: 1 });
                var pad = padding || 0;
                var parentEl = el.parentNode;
                var elOffsetWidth = el.offsetWidth - pad;
                var parentOffsetWidth = parentEl.offsetWidth;
                var ratio = parentOffsetWidth / elOffsetWidth;
                timeout = setTimeout(anime.set(el, { scale: ratio }), 10);
            }
            resize();
            window.addEventListener('resize', resize);
        }

        var advancedStaggeringAnimation = (function () {

            var staggerVisualizerEl = document.querySelector('.stagger-visualizer');
            var dotsWrapperEl = staggerVisualizerEl.querySelector('.dots-wrapper');
            var dotsFragment = document.createDocumentFragment();
            var grid = [20, 10];
            var cell = 55;
            var numberOfElements = grid[0] * grid[1];
            var animation;
            var paused = true;

            fitElementToParent(staggerVisualizerEl, 0);

            for (var i = 0; i < numberOfElements; i++) {
                var dotEl = document.createElement('div');
                dotEl.classList.add('dot');
                dotsFragment.appendChild(dotEl);
            }

            dotsWrapperEl.appendChild(dotsFragment);

            var index = anime.random(0, numberOfElements - 1);
            var nextIndex = 0;

            anime.set('.stagger-visualizer .cursor', {
                translateX: anime.stagger(-cell, { grid: grid, from: index, axis: 'x' }),
                translateY: anime.stagger(-cell, { grid: grid, from: index, axis: 'y' }),
                translateZ: 0,
                scale: 1.5,
            });

            function play() {

                paused = false;
                if (animation) animation.pause();

                nextIndex = anime.random(0, numberOfElements - 1);

                animation = anime.timeline({
                    easing: 'easeInOutQuad',
                    complete: play
                })
                    .add({
                        targets: '.stagger-visualizer .cursor',
                        keyframes: [
                            { scale: .75, duration: 120 },
                            { scale: 2.5, duration: 220 },
                            { scale: 1.5, duration: 450 },
                        ],
                        duration: 300
                    })
                    .add({
                        targets: '.stagger-visualizer .dot',
                        keyframes: [
                            {
                                translateX: anime.stagger('-2px', { grid: grid, from: index, axis: 'x' }),
                                translateY: anime.stagger('-2px', { grid: grid, from: index, axis: 'y' }),
                                duration: 100
                            }, {
                                translateX: anime.stagger('4px', { grid: grid, from: index, axis: 'x' }),
                                translateY: anime.stagger('4px', { grid: grid, from: index, axis: 'y' }),
                                scale: anime.stagger([2.6, 1], { grid: grid, from: index }),
                                duration: 225
                            }, {
                                translateX: 0,
                                translateY: 0,
                                scale: 1,
                                duration: 1200,
                            }
                        ],
                        delay: anime.stagger(80, { grid: grid, from: index })
                    }, 30)
                    .add({
                        targets: '.stagger-visualizer .cursor',
                        translateX: { value: anime.stagger(-cell, { grid: grid, from: nextIndex, axis: 'x' }) },
                        translateY: { value: anime.stagger(-cell, { grid: grid, from: nextIndex, axis: 'y' }) },
                        scale: 1.5,
                        easing: 'cubicBezier(.075, .2, .165, 1)'
                    }, '-=800')

                index = nextIndex;

            }

            play();

        })();
    </script>
</body>

</html>
Anime.js:轻量级 JavaScript 动画库使用指南 在前端开发中,动画效果能显著提升用户体验。Anime.js 是一款快速、多功能且轻量级的 JavaScript 动画库,拥有简单而强大的 API。它可以作用于 CSS 属性、SVG、DOM 属性和 JavaScript 对象,为开发者提供了灵活多样的动画实现方式。 阅读详情

相关推荐

anime插件 酷炫效果

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Do.

Jinmy的博客 841

【Anime.js】——JavaScript动画库:Anime.js——学习笔记

官网定义:anime.js 是一个简便的JS动画库,用法简单而且适用范围广,涵盖CSS,DOM,SVG还有JS的对象,各种带数值属性的东西都可以动起来。

qq_50497708的博客 1万+

Anime.js复杂路径动画的解决方案

当我们想要让一个对象沿着由多个{x, y}坐标点组成的复杂路径移动时,如果直接应用缓动函数,缓动效果通常只会应用于每个路径段,而不是整个动画路径。在这个例子中,虽然我们指定了缓动效果为’easeInCubic’,但实际上每个路径点的运动都是独立的,缓动效果并未在整个路径上均匀分布。通过这种方法,我们实际上是用一个线性动画来描绘路径,而另一个动画来控制这个线性动画的进度,这样就能在整个路径上实现我们想要的缓动效果。通过上述的解决方案,我们可以实现一个流畅的、缓动效果应用于整个路径的动画。

m0_74337424的博客 180

JavaScript动画库:Anime.js

JavaScript动画库:Anime.js

weixin_41897680的博客 9189

animation.js

这个是轮播必要使用的动画函数,将动画函数封装有助于节省代码,而且可以快速的开发项目,完成项目的动画需求

Amos实战:如何用Bootstrap法检验中介效应?附完整操作步骤

本文详细介绍了如何使用Amos软件通过Bootstrap法检验中介效应,包括模型设定、参数配置和结果解读。Bootstrap方法因其不依赖正态分布假设、统计功效高等优势,成为中介效应分析的首选方法。文章提供了完整的操作步骤和实用建议,帮助研究者准确评估变量间的中介作用机制。

zz67890的博客 1439

Anime.js DOM元素动画:HTML元素动态效果实现详解

还在为复杂的CSS动画语法头疼吗?还在为JavaScript原生动画API的繁琐而烦恼吗?Anime.js作为一款轻量级、高性能的JavaScript动画引擎,提供了简洁而强大的API,让你能够轻松实现各种复杂的DOM元素动画效果。 通过本文,你将掌握: - Anime.js核心概念与安装方法 - DOM元素基础动画实现技巧 - 高级动画效果与时间线控制 - 响应式动画与性能优化策略 - 实战案...

gitblog_00783的博客 1126

COMSOL模拟CO2驱替CH4:多物理场耦合建模与工程应用详解

在非常规天然气开发与碳封存工程中,多孔介质内的渗流、吸附与岩石变形相互耦合,使得CO2驱替CH4的产能预测和CO2封存评估无法仅靠经验公式完成。以达西定律描述裂隙流动、以扩展Langmuir方程刻画竞争吸附、用应力-吸附-渗透率关系关联煤岩变形,是多物理场耦合数值模拟的核心路径。COMSOL Multiphysics凭借内置渗流、固体力学与组分传递接口,能够将这些机制整合为可参数化扫描的仿真模型,为注气压力、井距、渗透率演化等方案设计提供量化依据。围绕CO2驱替CH4模拟的建模流程、参数取法与结果判读,可形

weixin_29574585的博客 162

anime.js 实战:实现一个带有描边动画效果的复选框 ...

在网页或者是APP的开发中,动画运用得当可以起到锦上添花的作用。正确使用动画,不但可以有助于用户理解交互的作用,还可以大大提高网页应用的魅力和使用体验。并且在现在的网页开发中,动画已经成为了一个设计的标准,变得越来越重要。特别是在一些和用户交互的地方,使用动画能更好的給用户以反馈,提...

weixin_34191845的博客 267

ZYNQ实战:如何用AXI-stream FIFO解决跨时钟域数据同步难题(附完整代码)

本文深入探讨了在ZYNQ项目中,如何利用AXI-Stream FIFO有效解决PS与PL之间的跨时钟域数据同步难题。文章详细分析了异步FIFO的架构设计、关键配置参数,并提供了PS端软件策略与PL端逻辑设计的完整代码示例,旨在帮助开发者构建稳定可靠的数据流通道,优化系统性能。

nginx7reverse的博客 754

【元宵快乐】猜灯谜吃元宵 元气满满闹元宵~(附猜灯谜小游戏)

导语 元宵节,又称上元节、灯节,是春节之后的第一个重要节日。 相传,汉文帝(前179—前157年)为庆祝周勃于正月十五勘平诸吕之乱,每逢此夜,必出宫游玩,与民 同乐,在古代,夜同宵,正月又称元月,汉文帝就将正月十五定为元宵节。 随着社会和时代的变迁,元宵节的风俗习惯在不断变化,但至今仍是中国的传统节日。2008年, 元宵节选入第二批国家级非物质文化遗产。 对我而言,除了吃元宵、看花灯……还有一件最重要的事情…就是… 猜灯谜!猜灯谜!!猜灯谜!!!猜谜事小,展现聪明才智事大哈哈哈.jpg .

顾木子吖的博客 2099

anime.js 实战:实现一个带有描边动画效果的复选框

本文转载于:猿2048网站anime.js 实战:实现一个带有描边动画效果的复选框 在网页或者是APP的开发中,动画运用得当可以起到锦上添花的作用。正确使用动画,不但可以有助于用户理解交互的作用,还可以大大提高网页应用的魅力和使用体验。并且在现在的网页开发中,动画已经成为了一个设计的标准,变...

chuluxie3918的博客 289

Spring AI 实战:第七章、Spring AI Advisor机制之记忆大师

从金鱼到最强大脑通过 Spring AI 的记忆功能,我们成功让 AI:记住了用户身份实现了多用户隔离做到了持久化存储最终效果用户:“和上次一样” → AI 秒懂用户:“你知道我的名字吗?” → AI:“当然,张三!AI的进化路线🐟金鱼脑 →🧠最强大脑 →🏛️记忆宫殿管理员。

liaokailin的专栏 1516

Anime.js 动画特效示例

运行动画</button><button class="button" id="multi-btn">运行动画</button><button class="button" id="text-btn">运行动画

zichenblog的博客 740

ARM CoreLink 系列 5.1.1 -- CI-700 System Address Map 】

所有的CHI 命令都包含一个 Source ID 和 Target ID, 其中 Source ID 可以来自于 RN Node, Target ID 可以来自于HN node或者其他 SN node. 其中 Target ID 是通过 SAM解析传入的地址得到的。对于 CI-700中的所有 RN Node 中的 SAM 多会进行配置,因为RN Node 访问的是整个地址空间,不同的地址空间会有不同的属性(I/O, DRAM),所以会对RN SAM 配置多个不同属性的区域。

CodingCos的博客 771

Python蓝色跳动的爱心(完整代码)

Python语言实现蓝色跳动的爱心的完整代码。 代码分析 这段代码使用了 库来创建一个动态的爱心图案,并在屏幕上显示带有动态效果的“我爱你”字样。以下是对这段代码的详细分析: 用于创建图形用户界面(GUI)。 用于生成随机数,主要用于控制爱心图案的扩散效果。 中的 , , , 用于数学计算,生成爱心形状和扩散效果。 包含了 等常量,用于控制控件的对齐方式。 2. 全局变量定义 , : 定义画布的大小。 , : 爱心的中心坐标。 : 用于定义爱心形状的缩放

AIGC 1919

基于 Letterize.js + Anime.js 实现炫酷文本特效

本文通过纯 Letterize.js + Anime.js 实现了一个很炫酷的文字动画效果,文字的每个字符呈波浪式的扩散式展开和收起。anime.js还有很多的参数可以尝试,有兴趣的朋友可以尝试探索看看~专注前端开发,分享前端相关技术干货,公众号:南城大前端(ID: nanchengfe)

南城 534

【Unity引擎技术整合】 Unity学习路线 | 知识汇总 | 持续更新 | 保持乐趣 | 共同成长

本文对Unity引擎的知识进行了一个整理总结,基本包含了Unity中大部分的知识介绍。 网上也有很多Unity相关的学习资料,但大多数都不成体系,学起来的时候难免会东奔西走的摸不着头脑。 本文整理的多数文章都是有对应的系列性文章专栏,可以更方便的进行系统学习相关知识体系。

努力前行,总会成为自己心中的那道光 15万+

从零到一:掌握Anime.js打造沉浸式3D卡片翻转效果

你是否曾为网页交互的单调乏味而烦恼?当用户滚动页面时,那些静态的元素是否让你觉得缺少了点什么?今天,我们将探索如何用Anime.js这个强大的JavaScript动画引擎,为你的网页注入生命,创造出令人惊艳的3D卡片翻转效果。想象一下,当用户滚动页面时,卡片如同魔术般旋转、堆叠、展开,这种沉浸式的体验将彻底改变用户对你网站的印象。 Anime.js不仅仅是一个动画库,它是一个完整的动画生态系统。

gitblog_01161的博客 445

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

animejs走马灯_功能强大的 Javascript 动画库插件anime.js

本期介绍一个前端动画插件anime.js,anime.js 是一款功能强大的 Javascript 动画库插件,可以和 CSS3 属性,SVG,DOM 元素和 JS 对象一起工作,制作出各种高性能,平滑过渡的动画效果。安装npm install animejsbower install animejs在页面中引入 anime.min.js 文件。HTML 结构初始化插件通过anime() 方法来构...

weixin_39855634的博客 1020

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Web 页面如何实现动画效果

例如,使用 CSS 动画实现页面中简单的动画效果,使用 JavaScript 动画实现复杂的动画效果;JavaScript 动画实现更加灵活,可以实现更多复杂的动画效果,但性能消耗比较大。JavaScript 动画库可以通过使用 JavaScript 代码实现动画,并提供了丰富的动画效果、强大的控制能力和高效的性能。使用合适的动画帧数:动画的帧数越多,动画越流畅,但同时也会增加网页的性能消耗。动画的名称为 "example",动画持续时间为 2 秒,动画效果为线性运动,并且将无限循环。

风清扬的专栏 4767

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

5种超实用Anime.js加载动画:从基础到高级Spinner实现指南

你是否还在为网页加载时单调的等待状态发愁?用户研究表明,带有精美加载动画的页面能将用户留存率提升40%。本文将通过Anime.js(JavaScript animation engine)实现5种实用Spinner效果,从基础圆形旋转到高级粒子动画,让你的网站在等待状态也能保持专业感和视觉吸引力。 ## 为什么选择Anime.js? Anime.js是一个轻量级但功能强大的JavaScript...

gitblog_00466的博客 972

实现动画效果(三种方法)

通过合理运用动画效果,可以使页面更加生动、吸引人,并且提升用户对网站或应用的认知和使用体验。3.另外,也可以使用现成的动画库(如GreenSock Animation Platform、Anime.js等)来简化动画的实现过程,提供更多的动画效果选项和交互特性。在Web开发中,动画通常通过CSS动画、JavaScript动画或者使用动画库来实现。通过指定动画的持续时间、时间函数、循环次数等属性,可以控制动画的表现形式。等方法来实现动画效果。通过在每一帧更新元素的位置、样式等属性,可以创建流畅的动画效果。

m0_62065520的博客 1799

✨ 前端动效神器Anime.js,酷炫网页动画轻松拿捏! ✨

是不是还在为网页上单调的静态元素发愁?今天就来给你们安利一个超级好用的JavaScript动画库——Anime.js!🚀忘了那些复杂的CSSkeyframes和繁琐的JS代码吧,Anime.js主打的就是一个轻量和灵活,让你用最少的代码实现最惊艳的动画效果。准备好了吗?一起上车,开启你的前端动效之旅!🚗。

mnlm2077的博客 789
上一篇: 【Anime.js】——JavaScript动画库:Anime.js——学习笔记
下一篇: 【Anime.js】——Anime.js源码之引擎的理解
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值