chrome 中使用自定义时间线的 Waapi 缓动被窃听
Waapi easing useing custom timeline in chrome is bugged
简介
TLDR:https://codesandbox.io/s/elated-jennings-6budz。为什么红色与 chrome 中的蓝色 不一样?这是一个错误吗?
我 使用 chrome 版本:76.0.3809.132。在 Firefox 中,一切都按预期工作。
问题
我正在使用 waapi 实现依赖自定义时间轴的动画(例如滚动位置作为时间轴)。概念如下:
waapi 允许您通过将 iterationStart
选项设置在 0 和 1 之间的某处(假设动画只有一次迭代)来中途启动动画。当动画立即暂停时,我们得到请求的帧。当下一个输入进入时,我们覆盖最后一帧。
所以当我们得到 0.5 的输入时,我们将使用以下代码:
// test keyframes
elem.animate({marginLeft: ["0px", "600px"]}, {
duration: 100,
easing: "linear",
fill: "both",
iterations: 1,
iterationStart: 0.5 // input
}).pause()
即使我们每 1/60 秒设置这样一个帧,这也能完美运行。然而,问题出现了,因为我们想要缓和动画(例如 easing: "ease"
而不是 linear
)。这引入了奇怪的故障,动画每次都以 相同的进度跳来跳去 (进度 = iterationSatrt / 输入)。例如,第一次跳转是在 0.148
使用 ease
作为缓动函数。有人可以解释这种行为吗?这是一个错误吗?
我遇到了以下相关性。 0.148 * 2
使用 ease
功能轻松完成 0.5
。为了计算这个,我使用 bezier-easing
库。这里的例子:https://runkit.com/embed/1wetjf7jjb2s。我不知道这是否相关,但我想我会分享我的发现。
这里的代码框 link 显示了问题:https://codesandbox.io/s/elated-jennings-6budz。请注意不要让它 运行 一次太长而不重新加载。
蓝色 div 使用修复来显示预期结果。为此,我保留了 easeing: "linear"
但自定义地使用 bezier-easing
库简化了每个输入,如上所示(以及代码中)。
这是一个错误,但显然已修复
简介
TLDR:https://codesandbox.io/s/elated-jennings-6budz。为什么红色与 chrome 中的蓝色 不一样?这是一个错误吗?
我 使用 chrome 版本:76.0.3809.132。在 Firefox 中,一切都按预期工作。
问题
我正在使用 waapi 实现依赖自定义时间轴的动画(例如滚动位置作为时间轴)。概念如下:
waapi 允许您通过将 iterationStart
选项设置在 0 和 1 之间的某处(假设动画只有一次迭代)来中途启动动画。当动画立即暂停时,我们得到请求的帧。当下一个输入进入时,我们覆盖最后一帧。
所以当我们得到 0.5 的输入时,我们将使用以下代码:
// test keyframes
elem.animate({marginLeft: ["0px", "600px"]}, {
duration: 100,
easing: "linear",
fill: "both",
iterations: 1,
iterationStart: 0.5 // input
}).pause()
即使我们每 1/60 秒设置这样一个帧,这也能完美运行。然而,问题出现了,因为我们想要缓和动画(例如 easing: "ease"
而不是 linear
)。这引入了奇怪的故障,动画每次都以 相同的进度跳来跳去 (进度 = iterationSatrt / 输入)。例如,第一次跳转是在 0.148
使用 ease
作为缓动函数。有人可以解释这种行为吗?这是一个错误吗?
我遇到了以下相关性。 0.148 * 2
使用 ease
功能轻松完成 0.5
。为了计算这个,我使用 bezier-easing
库。这里的例子:https://runkit.com/embed/1wetjf7jjb2s。我不知道这是否相关,但我想我会分享我的发现。
这里的代码框 link 显示了问题:https://codesandbox.io/s/elated-jennings-6budz。请注意不要让它 运行 一次太长而不重新加载。
蓝色 div 使用修复来显示预期结果。为此,我保留了 easeing: "linear"
但自定义地使用 bezier-easing
库简化了每个输入,如上所示(以及代码中)。
这是一个错误,但显然已修复