【发布时间】:2017-07-18 04:16:58
【问题描述】:
我正在使用Web Animation API 创建一个简单的动画,这样当用户在target 上移动鼠标时,动画应该从左到右开始,当用户将鼠标从target 上移开时,动画应该反转,target 应该从右向左移动。
目前如果用户在动画过程中将鼠标移入/移出,动画是生涩的,我没有平滑的效果。
我想知道如何解决这个问题。
注意:目前我正在使用 Web Animation API。但是在使用 CSS Keyframe Animation 时也会出现同样的问题。
我也尝试使用以下解决方案解决此问题,这改善了情况,但仍然存在问题。这是一个活生生的例子https://jsfiddle.net/x784xwoa/5/
var elm = document.getElementById("target");
var player = document.getElementById("target");
elm.addEventListener('mouseover', function(event) {
console.log('mouseover', player.playState, 'animate');
player = elm.animate(
[{
left: "0px",
boxShadow: 'rgba(0, 0, 0, 0.5) 0px 0px 0px 0px'
}, {
left: "100px",
boxShadow: 'rgba(0, 0, 0, 0.9) 50px 150px 100px 0px'
}], {
duration: 3000,
direction: "normal",
fill: "forwards",
iterations: 1
}
);
});
elm.addEventListener('mouseout', function(event) {
console.log('mouseout', player.playState, 'reverse');
player.reverse();
});
#target {
position: relative;
top: 0;
left: 0;
width: 100px;
height: 150px;
background-color: red;
}
<div id="target"></div>
【问题讨论】:
-
您注意到更新后的 codepen 有什么急躁?目前 Chrome 和 Firefox 都在实现附加动画(Web Animations 的一部分),这将允许您制作一个动画,平滑过渡到另一个动画。
标签: javascript css animation web-animations