2012-12-01 71 views
0

我有一個開門的動畫(41幀),我想用javaScript打開onmouseover,並且我想讓它回到第1幀onmouseout。我認爲我沒有做到這一點。先謝謝您的幫助!javaScript動畫圖像onmouseover/onmouseout

HTML: 
    <div onmouseover="startAnimation()" onmouseout="stopAnimation()" 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...(41 frames) 

css: 
    #door img{ 
    display: none; 
    } 

    #door img:first-child { 
    display: block; 
    } 

javaScript: 
    function startAnimation() { 
    var frames = document.getElementById("door").children; 
    var frameCount = frames.length; 

    for (i=0; i<41; i++) { 
    setTimeout(function(){ 
    frames[i % frameCount].style.display = "none"; 
    frames[++i % frameCount].style.display = "block"; 
    }, 50*i); 
    } 
    } 

    function stopAnimation() { 
    var frames = document.getElementById("door").children; 
    var frameCount = frames.length; 

    for (i=0; i<1; i++){ 
    setTimeout(function(){ 
    frames[++i % frameCount].style.display = "none"; 
    frames[i % frameCount].style.display = "block"; 
    }, 50*i); 
    } 
    } 

這裏有一個鏈接: http://www.reveriesrefined.com/test

+2

鏈接正在返回一個403禁止狀態 – lostsource

+1

stopAnimation中的for循環不應該有「i <41」而不是「i <1」嗎? – luwes

+0

我似乎無法修復鏈接,但如果您只是將其粘貼到瀏覽器中,它應該可以正常工作。 – user1868086

回答

1

我覺得這可能是更喜歡你想要什麼:

var ti, frame = 0, 
frames = document.getElementById('door').children; 

function resetAnimation() { 
    frame = 0; 
    frames[0].style.display = 'block'; 
    for (var i = 1; i < frames.length; i++) { 
     frames[i].style.display = 'none'; 
    } 
} 
function startAnimation() { 
    console.log('start animation'); 
    resetAnimation(); 
    ti = setInterval(function() { 
     frames[frame].style.display = 'none'; 
     frame ++; 
     if (frame >= frames.length) frame = 0; 
     frames[frame].style.display = 'block'; 
    }, 50); 
} 
function stopAnimation() { 
    if (ti) { 
     clearInterval(ti); 
     ti = undefined; 
    } 
    resetAnimation(); 
}​ 

注意,它通常是更合適的比的setTimeout使用的setInterval當你想要一個連續的動畫。全局變量存儲我們當前正在查看的幀。 resetAnimation將幀設置爲零並相應地設置顯示。 startAnimation會設置一個隱藏舊幀的間隔計時器,將幀增加一個,並每隔50ms顯示一個新幀。停止動畫只是清除間隔計時器並重置動畫。

+0

我試過你的代碼,但它不工作。它甚至不會開始動畫。我試過onmouseover =「startAnimation()」onm​​ouseout =「stopAnimation()」,我也嘗試onClick,但它不啓動動畫。任何想法爲什麼?我正在嘗試一堆東西,但似乎無法讓動畫與您的代碼一起工作。 – user1868086

+0

適用於我[這裏](http://jsfiddle.net/vHbn5/3/)。在原始代碼中,事件處理程序位於空白div(id =「door2」)上,因此您甚至可能無法看到需要將鼠標放在上面的div。 – Stuart