如何檢測由css3動畫或網頁動畫(Element.animate)所做的更改?如何檢測由CSS3動畫或Web動畫API所做的更改?
(對不起,我的英文不好!這是我在#1的第一個問題)
我知道MutationObserver,它只是如果我改變內嵌樣式或者如果我使用requestAnimationFrame(因爲我用它更改內聯樣式)響應。但是如果我使用css3動畫或Web動畫,MutationObserver不會響應,因爲它們不會更改內聯樣式。
看到這裏...這裏有兩個div ... div1,div2。當div2的位置改變時,div1的位置將會改變。但是這隻有在我使用requestAnimationFrame的時候纔會發生。
我的問題是我怎樣才能做到這一點的css3動畫和網頁動畫(Element.animate)?
var div1 = document.getElementById("div1");
var div2 = document.getElementById("div2");
/***** Add mutation observer to detect change *****/
var mutation = new MutationObserver(function(mutations) {
div1.style.left = div2.style.left;
});
mutation.observe(div2, {
attributes: true
});
/***** Animation with css *****/
function cssAnimation() {
div2.style.animation = "anim 1.5s linear";
}
/***** Animation with web animations *****/
function webAnimation() {
div2.animate({
left: [0, "500px"]
}, {
duration: 1500,
easing: "linear"
});
}
/*****Animation with requestAnimationFrame ******/
//Current left position of div2
var left = 0;
function requestAnimation() {
//Increase left position 5px per keyframe
div2.style.left = `${(left += 5)}px`;
//Increase left position until it reaches to 500px
if (left < 500) {
requestAnimationFrame(requestAnimation);
}
}
function clearAnimations() {
left = 0;
div2.style.left = 0;
div2.style.animation = "unset";
}
@keyframes anim {
from {
left: 0;
}
to {
left: 500px;
}
}
#div1 {
background: orange;
width: 100px;
height: 100px;
position: absolute;
top: 200px;
}
#div2 {
background: lightgreen;
width: 100px;
height: 100px;
position: absolute;
top: 100px;
}
<div id="buttons">
<h3>Animate with...</h3>
<button onclick='cssAnimation()'>Css3</button>
<button onclick="requestAnimation()">request animation frame</button>
<button onclick="webAnimation()">web animations api</button>
<button id="clear" onclick="clearAnimations()">Clear</button>
</div>
<div id="div1">
Div1
</div>
<div id="div2">
div2
</div>
什麼時候你想檢測到CSS的變化? – guest271314
我知道我可以使用animationstart並通過setInterval進行更新,直到animationend事件發生時發生clearInterval。但它有性能問題。 –
@IbrahimAlKhalil你爲什麼要用setInterval?絕對沒有必要。請閱讀css動畫和課程。你正在接近這完全錯誤的。 – Darkrum