【Anime.js】——Anime.js源码核心理解

news2025/2/21 9:25:47

一、Anime.js整体结构

Anime.js的强大之处在于代码量非常少,但功能却非常强大。让我们一起来探索Anime.js源码的核心吧~

Anime.js之所以能如此强大主要是因为它的代码结构设计的非常巧妙合理,所以我们想要掌握Anime.js的核心,首先我们要了解它的结构。

Anime.js结构如下图:

橘色的方块是浏览器提供的API。下面三个蓝色的 方块是Anime.js自己实现的方法。

我们会通过下面一一解读并实现。


 二、Anime.js——engine()引擎的实现

先了解一下什么是requestAnimationFrame()方法

语法:

window.requestAnimationFrame(callback);

  window.requestAnimationFrame(callback) 告诉浏览器——你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。

该方法需要传入一个回调函数callback作为参数,该回调函数会在浏览器下一次重绘之前执行。

callback内部还接受一个参数,该参数表示开始去执行回调函数的时刻。

备注: 若想在浏览器下次重绘之前继续更新下一帧动画,那么回调函数自身必须再次调用 window.requestAnimationFrame()

 也就是说:

window.requestAnimationFrame()是创建了一个方法去等待执行。

既然有等待,那么也就会有取消。 window.cancelAnimationFrame() 以取消回调函数。window.requestAnimationFrame()会返回一个ID,将这个ID传给window.cancelAnimationFrame()。

engine()引擎的实现:

为什么使用闭包?

引擎engine的方法和动画anime的方法,没有放在一起,这样我们就可以多次调用 anime方法,这就意味着调用一个anime方法就针对一个引擎,但是他们调用的都是同一个方法,那么如何区分开呢?使用闭包,就可以创建不同的内存块,这样就将不同的anime方法对应不同的引擎。

效果:

 三、处理目标元素

 createNewInstance()是上图蓝色框中的最后一个。

 createNewInstance()的参数和返回值分析:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/100146.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux内核基础篇——动态输出调试

文章目录配置内核编译选项debugfs文件系统挂载动态输出使用实际案例动态输出(dynamic print)是内核子系统开发者最喜欢的输出技术之一。 上篇说到printk调试,但printk是全局的,只能设置输出等级。而动态输出可以动态选择打开某个…

Tensorflow Serving部署推荐模型

Tensorflow Serving部署推荐模型 1、找到当前模型中定义的variables,并在此定义一个saver用于保存模型参数 def saveVariables(self):variables_dict {}variables_dict[self.user_embedding.op.name] self.user_embeddingvariables_dict[self.item_embedding.op…

【LeetCode】1971. 寻找图中是否存在路径

题目描述 有一个具有 n 个顶点的 双向 图,其中每个顶点标记从 0 到 n - 1(包含 0 和 n - 1)。图中的边用一个二维整数数组 edges 表示,其中 edges[i] [ui, vi] 表示顶点 ui 和顶点 vi 之间的双向边。 每个顶点对由 最多一条 边连…

犀牛插件开发-基础核心-技术概览-总体架构-教程

文章目录1.概述2.基础核心2.1.C Rhino 核心2.2.openNURBS2.3.C SDK3.C Stack3.1.C Plugins3.2.RhinoScript4.NET Stack4.1.C API4.2.NET Framework4.3.RhinoCommon4.4.Eto4.5.net插件4.6.Grasshopper组件4.7.Python脚本5.相关主题1.概述 《Rhinoceros》由许多层组成——用多种…

细说OA系统的繁荣发展

改革开放以来,科技发展突飞猛进,我们生活的方方面面都受到了巨大影响。随着信息化时代的到来,企业的办公方式也发生了巨大的改变,OA系统随之走进了大众的视野。细数这四十几年,OA办公系统已经由一个异想天开的想法变成…

centos7.8离线安装pg和postgis

安装包下载地址: 链接:https://pan.baidu.com/s/1MxJc-5Ws6OPTRAoC-2srJw 提取码:is2q 1.centos7.8 离线安装pg操作步骤 这里基于centos7.8空白系统操作实践写的文档,系统一致的情况下可以照搬教程操作安装,镜像为…

1.0、Hibernate-快速入门初体验

1.0、Hibernate-快速入门初体验 Hibernate 和 mybatis 一样是 ORM (Object Relation Mapping) 对象关系映射框架,将面向对象映射成面向关系。 如何使用呢? 1、导入依赖; 2、创建 Hibernate 配置文件; 3、创建实体类; 4…

Allegro172版本多人协同在线设计操作指导

Allegro172版本多人协同在线设计操作指导 Allegro升级到172版本,可以支持多人协同设计,并且实时同步,具体操作如下 首先用户需要在同一个局域网下,并且Allegro172的版本必须一致,比如都是S082的版本 第一个用户打开PCB,选择Symphony Team design 选择 Start Symphony …

2022年度总结

自我介绍 大家好,我又回来了!我在一年之前在 CSDN 写了第一篇文章,到现在也有一年时间了。这次回来呢,也是因为 CSDN 官方发的消息,让写一篇年度总结的文章。在离开的这几个月里,主要是因为工作繁忙&#…

ASO优化:总结APP被下架的5点原因

随着苹果的App Store的监管力度的不断加强,每个APP都会有被下架的风险,而对于开发者来说,APP被下架是一件很严重的事情,不仅会造成用户的流失,还会降低用户对APP 的信任。所以,我们要了解APP被下架的原因&a…

【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)

需要源码和依赖请点赞关注收藏后评论区留言私信~~~ 一、Dataframe操作 步骤如下 1)利用IntelliJ IDEA新建一个maven工程,界面如下 2)修改pom.XML添加相关依赖包 3)在工程名处点右键,选择Open Module Settings 4&a…

整数的大小端序

在存储整数时,一般按字节为逻辑单位进行存储,有“小端序”和“大端序”之分。小端序(little-endian) 是指将表示整数的低位字节存储在内存地址的低位,高位字节存储在内存地址的高位。如果将整数 1982062410 存储至内存…

【CANN训练营第三季】2022年度第三季新手班之昇腾AI入门课

本次参加CANN训练营,本来我报名的是进阶班课程,再看一遍新手班,学习一下目前CANN的最新进展也是不错的,巩固一下。 视频课程大家可以从这里看到 (1)【CANN训练营第三季】- 昇腾AI入门课(上&am…

使用Keepalived工具实现集群节点的高可用

GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:蟹黄瓜子文章来源:社区投稿 1.前言 在集群当中离不开的一个词就是是高可用,用本文来…

OpenWrt + 每步科技DDNS 实现ipv6动态域名解析方法

其实好几个月前我就已经把这个动态域名设置好了,后面重新刷了系统,忘记保存,又得重新再来,这次把过程记录一下,免得下次再从头百度。 工具 刷好openWrt的路由器一个每步科技注册的域名(我为什么选择这个&…

数字电子技术(八)D/A和A/D转换

D/A和A/D转换概述D/A转换A/D转换例题练习模拟信号:在时间与数值上都连续 数字信号:在时间与数值上都离散 概述 D/A转换:数字信号——模拟信号 (D/A转换器简称DAC)A/D转换:模拟信号——数字信号 &#xff0…

修改物料编号格式及长度

修改物料编号格式及长度(OMSL) 路径:IMG--后勤常规--物料主数据--基本设置--定义物料编号的输出格式

毕业设计 - 基于JSP的合同信息管理系统【源码+论文】

文章目录前言一、项目设计1. 模块设计数据库设计2. 实现效果二、部分源码项目源码前言 今天学长向大家分享一个 java web jsp 项目: 基于JSP的合同信息管理系统 适合用于毕业设计、课程设计 一、项目设计 1. 模块设计 需求分析是从客户的需求中提取出软件系统能够帮助用户…

java互联网医院系统HIS源码带本地搭建教程

技术架构 技术框架:SpringBoot MySql MyBatis nginx Vue2.6 原生APP 运行环境:jdk8 IntelliJ IDEA maven 宝塔面板 Android Studio 文字本地搭建教程 下载源码,小皮面板安装mysql5.7数据库,创建一个新数据库,…

引力波探测,冷冻电镜研究:两项诺奖GPU功不可没

我们的日常工作固然重要,但并非每一份重要的工作都能够助力他人获得诺贝尔奖。然而,就在2017年10月,GPU 计算便两度成为了助力获得诺贝尔奖的幕后英雄。 三名美国物理学家Rainer Weiss、Barry Barish和Kip Thorne因探测到了爱因斯坦百年前预测…