web animations api

2023-10-08 00:10
文章标签 web api animations

本文主要是介绍web animations api,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

web animations api

Web Animations API 允许同步和定时更改网页的呈现, 即DOM元素的动画。它通过组合两个模型来实现:时序模型(描述动画时间)和 动画模型(描述动画样式)。

基本用法:

下面是使用css实现一个动画:

#alice {animation: aliceTumbling infinite 3s linear;
}@keyframes aliceTumbling {0% {color: #000;transform: rotate(0) translate3D(-50%, -50%, 0);}30% {color: #431236;}100% {color: #000;transform: rotate(360deg) translate3D(-50%, -50%, 0);}
}

在这里插入图片描述

现在让我们尝试使用Web动画API创建相同的动画:

//1.我们首先要做的是创建一个对应于我们的CSS @keyframes块的关键帧对象:
var aliceTumbling = [{ transform: 'rotate(0) translate3D(-50%, -50%, 0)', color: '#000' },{ color: '#431236', offset: 0.3},{ transform: 'rotate(360deg) translate3D(-50%, -50%, 0)', color: '#000' }
];
//2.我们还需要创建一个定时属性的对象对应于爱丽丝动画中的值:
var aliceTiming = {duration: 3000,iterations: Infinity,easing: linear
}
//3.执行动画
var aliceAnimation =document.getElementById("alice").animate(aliceTumbling,aliceTiming
)
//4.控制动画播放
aliceAnimation.pause()
/*
Animation.play() 播放动画
Animation.pause() 暂停动画
Animation.finish() 动画结束
Animation.cancel() 终止动画
Animation.reverse() 设置动画播放速度
Animation.playbackRate 到负值,所以它向后运行(改变动画的速度)
*/

接口对象:

1】Animation

提供播放控制动画节点源的时间轴

//1.构造函数(Animation构造函数返回一个新的Animation对象实例)
var animation = new Animation(effect, timeline);
/*
参数 
effect(可选)
将KeyframeEffect对象分配给动画。(在将来,其他类型的效果,如SequenceEffects或GroupEffects是可能被实现的,但现在,唯一的效果是KeyframeEffect。)
timeline(可选)
指定与动画关联的时间轴。(目前唯一可用的时间轴类型是DocumentTimeline对象,但在将来我会有与手势或滚动相关联的时间轴。)默认为Document.timeline。这也可以设置为null。
*///2.属性
/*
Animation.currentTime
动画的当前时间值(以毫秒为单位),无论是正在运行还是已暂停。如果动画缺少timeline或尚未播放,其值为null。
Animation.effect
获取或设置与此动画相关联的KeyframeEffect。
Animation.finished 只读
返回此动画的当前完成的状态。
Animation.id
获取或设置用于标识动画的字符串。
Animation.playState 只读
返回描述动画播放状态的枚举值。
Animation.playbackRate
返回或设置动画的播放速率。
Animation.ready 只读
返回此动画的当前就绪状态。
Animation.startTime
获取或设置动画播放应开始的预定时间。
Animation.timeline
获取或设置与此动画相关联的timeline。
*///3.事件处理程序
/*
Animation.oncancel
获取并设置取消事件的事件处理程序。
Animation.onfinish
获取并设置完成事件的事件处理程序。
*///4.方法
/*
Animation.cancel()
清除此动画的所有keyframeEffects,并中止播放。
Animation.finish()
设置动画中止播放。
Animation.pause()
暂停播放动画。
Animation.play()
开始或恢复播放动画,或者如果之前完成,则重新开始动画。
Animation.reverse()
反转播放动画,直到播放到动画开始时停止。 如果动画完成或未播放,它将从头到尾播放。
*/

我们来看一个mdn的例子

var whiteRabbit = document.getElementById("rabbit");
var rabbitDownKeyframes = new KeyframeEffect(whiteRabbit, [{ transform: 'translateY(0%)' }, { transform: 'translateY(100%)' }], { duration: 3000, fill: 'forwards' });
var rabbitDownAnimation = new Animation(rabbitDownKeyframes, document.timeline);
// On tap or click,
whiteRabbit.addEventListener("mousedown", downHeGoes, false);
whiteRabbit.addEventListener("touchstart", downHeGoes, false);
// Trigger a single-fire animation
function downHeGoes(event) {// Remove those event listenerswhiteRabbit.removeEventListener("mousedown", downHeGoes, false);whiteRabbit.removeEventListener("touchstart", downHeGoes, false);  // Play rabbit animationrabbitDownAnimation.play();
}

img

2】KeyframeEffect

描述动画属性的集合。然后可以使用Animation构造函数传入该描述动画的集合进行播放。

keyframeSet

var keyframes = new KeyframeEffect(element, keyframeSet, keyframeOptions);
var keyframes = new KeyframeEffect(sourceKeyFrames);/*参数
element
要动画的DOM元素,或为null。keyframeSet
关键帧对象或null。keyframeOptions 可选
delay、direction、duration、easing、endDelay、fill、iterationStart、iterations、composite、iterationCompositesourceKeyFrames
要克隆的KeyframeEffect对象
*/

例子:

var rabbitDownKeyframes = new KeyframeEffect(whiteRabbit, // element to animate[{ transform: 'translateY(0%)' }, // keyframe{ transform: 'translateY(100%)' } // keyframe],{ duration: 3000, fill: 'forwards' } // keyframe options
);
3】AnimationTimeline

Web动画API的AnimationTimeline接口表示动画的时间轴。这个接口用于定义时间轴功能(被文档时间线 (en-US)和未来的时间轴类型所继承),但本身并不能被开发人员直接使用。无论何处当你要用AnimationTimeline,都应该使用DocumentTimeline或其他时间轴类型来实例化。

//1.属性
AnimationTimeline.currentTime 只读
//返回此时间轴的时间值(以毫秒为单位),若此时间轴未激活则返回null。
4】DocumentTimeline

Web Animations API 的 DocumentTimeline 接口表示动画时间线,包括默认的文档时间线(通过 Document.timeline 访问)。

const cats = document.querySelectorAll('.sharedTimelineCat');
//创建与当前浏览上下文的活动文档关联的新DocumentTimeline对象。
const sharedTimeline = new DocumentTimeline({ originTime: 500 });
//以原始时间500ms之后启动所有的cats元素的动画
for (const cat of cats) {const catKeyframes = new KeyframeEffect(cat, keyframes, timing);const catAnimation = new Animation(catKeyframes, sharedTimeline);catAnimation.play();
}/*
属性
此接口从其父类 AnimationTimeline 继承其属性。
AnimationTimeline.currentTime
返回此时间轴的时间值(以毫秒为单位),若此时间轴未激活则返回null。
*/

拓展功能:

Web Animations API 向 document 和 element 添加了一些新的功能。

扩展到 Document 的接口
  • document.timeline

    DocumentTimeline 表示默认文档时间轴

  • document.getAnimations()

    返回当前对文档中的元素有效的Animation对象的数组。

扩展到 Element 的接口
  • Element.animate()

    用于在元素上创建和播放动画的快捷方式。 它返回创建的Animation对象实例。

React Demo:

在react中使用Animation动画api:

import React, { useRef, useEffect } from "react";
import "./styles.css";export default function App() {const title = useRef<HTMLHeadingElement | null>(null);const subtitle = useRef<HTMLHeadingElement | null>(null);useEffect(() => {//设置动画效果let fadeAndMove = [{ opacity: 0, transfrom: `translateY(-20px)` },{ opacity: 1, transfrom: `translateY(0px)` }];//设置过渡let titleTiming = { duration: 2000, easing: "ease-in-out" };//执行动画,并返回当前动画描述对象const TitleAnimaiton = title.current?.animate(fadeAndMove, titleTiming);//设置动画效果let expend = [{ opacity: 0, letterSpacing: `-0.5em` },{ opacity: 1, letterSpacing: `initial` }];//设置过渡let subtitleTiming = {//同个标题的动画的描述对象获取它的过渡时间duration:(TitleAnimaiton?.effect?.getComputedTiming().duration as number) / 2,easing: "ease-in-out"};//执行动画并返回动画对象const subtitleAnimaiton = subtitle.current?.animate(expend, subtitleTiming);//暂停动画(动画不会继续播放)subtitleAnimaiton?.pause();//添加点击事件,并播放动画function clickCallback() {//playState:idle, running, paused, finished四种状态if (subtitleAnimaiton?.playState !== "finished") {subtitleAnimaiton?.play();}}document.addEventListener("click", clickCallback, false);//清除副作用return () => {TitleAnimaiton?.cancel();subtitleAnimaiton?.cancel();document.removeEventListener("click", clickCallback, false);};}, [title, subtitle]);return (<main><div className="container"><h1 className="title" ref={title}>Hello World</h1><h2 className="subtitle" ref={subtitle}>Start editing to see some magic happen!</h2></div></main>);
}

img

参考资料:

MDN Animation

MDN Web Animations API

MDN Using the Web Animations API

CSS Animation 与 Web Animation API 之争

b站视频

React Demo

这篇关于web animations api的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/161371

相关文章

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

Java Web指的是什么

Java Web指的是使用Java技术进行Web开发的一种方式。Java在Web开发领域有着广泛的应用,主要通过Java EE(Enterprise Edition)平台来实现。  主要特点和技术包括: 1. Servlets和JSP:     Servlets 是Java编写的服务器端程序,用于处理客户端请求和生成动态网页内容。     JSP(JavaServer Pages)

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

9.8javaweb项目总结

1.主界面用户信息显示 登录成功后,将用户信息存储在记录在 localStorage中,然后进入界面之前通过js来渲染主界面 存储用户信息 将用户信息渲染在主界面上,并且头像设置跳转,到个人资料界面 这里数据库中还没有设置相关信息 2.模糊查找 检测输入框是否有变更,有的话调用方法,进行查找 发送检测请求,然后接收的时候设置最多显示四个类似的搜索结果

【LabVIEW学习篇 - 21】:DLL与API的调用

文章目录 DLL与API调用DLLAPIDLL的调用 DLL与API调用 LabVIEW虽然已经足够强大,但不同的语言在不同领域都有着自己的优势,为了强强联合,LabVIEW提供了强大的外部程序接口能力,包括DLL、CIN(C语言接口)、ActiveX、.NET、MATLAB等等。通过DLL可以使用户很方便地调用C、C++、C#、VB等编程语言写的程序以及windows自带的大

JavaWeb【day09】--(Mybatis)

1. Mybatis基础操作 学习完mybatis入门后,我们继续学习mybatis基础操作。 1.1 需求 需求说明: 根据资料中提供的《tlias智能学习辅助系统》页面原型及需求,完成员工管理的需求开发。 通过分析以上的页面原型和需求,我们确定了功能列表: 查询 根据主键ID查询 条件查询 新增 更新 删除 根据主键ID删除 根据主键ID批量删除

如何更优雅地对接第三方API

如何更优雅地对接第三方API 本文所有示例完整代码地址:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/third 我们在日常开发过程中,有不少场景会对接第三方的API,例如第三方账号登录,第三方服务等等。第三方服务会提供API或者SDK,我依稀记得早些年Maven还没那么广泛使用,通常要对接第三方

利用Django框架快速构建Web应用:从零到上线

随着互联网的发展,Web应用的需求日益增长,而Django作为一个高级的Python Web框架,以其强大的功能和灵活的架构,成为了众多开发者的选择。本文将指导你如何从零开始使用Django框架构建一个简单的Web应用,并将其部署到线上,让世界看到你的作品。 Django简介 Django是由Adrian Holovaty和Simon Willison于2005年开发的一个开源框架,旨在简

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配(Exact Match)2. 正则表达式匹配(Regex Match)3. 前缀匹配(Prefix Match) 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中,location 指令用于定义如何处理特定的请求 URI。由于网站往往需要不同的处理方式来适应各种请求,NGINX 提供了多种匹