通过静态插值控制关键帧动画进度
Control keyframe animation progress via static interpolation
假设您希望通过在animation-play-state
设置为暂停时操作 animation-delay
属性来控制 CSS 关键帧动画的进度。
这应该:
- 在所有浏览器中工作支持CSS 动画规范
- 对于基本用例,每秒至少以 30 帧的速度运行
出于渲染性能和适当分离关注点的原因,您希望它不:
- 要求脚本了解有关由受控关键帧动画插值的 CSS 属性的任何信息
- 解析样式表以获取所述知识
- 在隐藏元素上运行动画,并将读取的内插 CSS 属性值传输到目标元素
问题
animation-delay
技术似乎不适用于以下浏览器(在提供的两个示例中都可以重现问题(
- 野生动物园>= 8
- iOS Safari>= 8
- IE>= 10
- Microsoft边缘
有没有办法在满足上述所有要求的同时为所有浏览器产生所需的行为?
技术
- https://css-tricks.com/debugging-css-keyframe-animations/
- https://www.youtube.com/watch?v=s4HdeJctq-A#t=26m53s
例子
- http://codepen.io/team/css-tricks/pen/LVMMGZ/(拖动滑块(
- http://codepen.io/marionebl/pen/wKjBgQ(向下滚动(
问题
- Lea Verou概述的静态插值技术在Chrome和Firefox以外的浏览器中不起作用
- 该规范没有涵盖
animation-play-state
的行为,并明确地将animation-delay
称为IE和Safari的偏离实现。请参阅 http://www.w3.org/TR/css3-animations/#animation-delay 和 http://www.w3.org/TR/css3-animations/#animation-play-state
解决方案
为了部分满足上述要求,我实现了一个名为 jogwheel 的库,它允许对通过 CSS 关键帧动画声明的动画进行时间轴控制。要实现此慢轮,请执行以下操作:
- 获取给定
HTMLElement
的计算animation-name
- 搜索
document.styleSheets
以匹配CSSKeyFramesRule
- 将找到的
CSSKeyFrameRule
转换为与即将推出的element.animate
兼容的关键帧数组,这是提议的WebAnimations标准的一部分。 - 提供一个 API,允许根据动画的时间轴长度控制动画
要使用慢轮,您必须
安装库:
npm install --save jogwheel web-animations-js
在你的 JavaScript 中:
// WebAnimations polyfill required
require('web-animations');
var JogWheel = require('jogwheel');
var element = document.querySelector('[data-animated]');
var wheel = JogWheel.create(element);
// Jumps midway into animation
wheel.seek(0.5);
相关文章:
- 关键帧之间的css3动画延迟
- 访问css3动画的关键帧
- 一种读取或更改CSS动画关键帧的方法
- 多次单击时运行关键帧动画
- CSS3 关键帧动画是否比属性过渡更平滑?
- CSS 关键帧动画的随机“起点”
- 为什么单击时的关键帧动画只触发一次
- 使用 JQuery 事件检测特定的 CSS 关键帧动画
- 如何从 css 动画关键帧获取图像以在完成后保留在页面上
- 通过滚动触发 CSS 关键帧动画
- CSS动画关键帧平滑移动
- 如何动态创建“@关键帧”CSS 动画
- 如何使用javascript创建自定义关键帧css动画
- 为什么可以't我重用CSS关键帧动画
- CSS3关键帧-改变动画持续时间导致“;跳跃”;
- 使用JavaScript控制CSS3关键帧动画
- 如何移动到CSS3动画中的某个关键帧
- 通过静态插值控制关键帧动画进度
- 延迟关键帧每定义的时间,并保持不透明度0动画后
- CSS3关键帧动画的“时间线”问题