私がやろうとしていること:
- 1 つの画像を次の画像にすばやく連続して交換する JavaScript アニメーション (合計 114 フレーム)。
- ドアの画像にマウスオーバーすると開きます。(72 フレームを再生し、フレーム 72 にとどまります)
-onmouseout ドアが閉じます。(42 フレームを再生し、最後のフレームにとどまります)
- アニメーションが完了する前にマウスを要素から離すと、72 フレームが終了してから 42 フレームが再生されます。
- 42 フレームが終了する前にマウスを要素に戻すと、42 フレームの再生が終了してから 72 フレームが再生されます。
問題: -
私は JavaScript の初心者で、まだ完全には理解していません。
- ある程度は機能しますが、非常にバグが多く、アニメーションを台無しにせずにマウスを要素から離すことはできません。
- また、上記のすべてを実行する方法がわかりません。
これが私が今持っているコードです:
HTML:
<div onmouseover="openDoor()" onmouseout="closeDoor()" id="door2"></div>
<div id="door">
<img src="images/Animation_Door/0001.png">
<img src="images/Animation_Door/0002.png">
<img src="images/Animation_Door/0003.png">
...etc... (114 frames)
</div>
CSS:
#door {
background-color:transparent;
...etc...
}
.door img{
display: none;
}
.door img:first-child {
display: block;
}
javaScript:
function openDoor() {
var ti, frame = 0;
var frames = document.getElementById("door").children;
var frameCount = frames.length;
for (i=0; i<72; i++) {
ti = setTimeout(function(){
frames[i % frameCount].style.display = "none";
frames[++i % frameCount].style.display = "block";
}, 50*i);
}
}
function closeDoor() {
var ti, frame = 0;
var frames = document.getElementById("door_close").children;
var frameCount = frames.length;
for (i=0; i<42; i++) {
setTimeout(function(){
frames[i % frameCount].style.display = "none";
frames[++i % frameCount].style.display = "block";
}, 50*i);
}
}