2012-06-23 31 views
0

我試圖用Raphael創建一個簡單的播放/暫停按鈕系統,但我不斷收到範圍問題。事件調用和範圍問題

感謝Raphael,按鈕本身只是嵌入到SVG標籤中的圖像。 的目標是讓這個「事件循環」:

  • 如果顯示play.png,onmouseoverremove() play.png和節目播放hover.png
  • 如果顯示播放hover.png,onclickremove()播放hover.png顯示pause.png
  • 如果顯示pause.png,onmouseoverremove() pause.png節目暫停hover.png
  • 如果顯示暫停hover.png,onclickremove()暫停hover.png show play.png

這看起來很蠢,但我真的有範圍和關閉的問題。這是我此刻的代碼:

function toPlay(pauseHover) { 
    pauseHover.remove(); 
    var play = paper.image("images/play.png", Img.X, Img.Y, Img.height, Img.width); 
    play.node.onmouseover = toPlayHover(play); 
    } 

    function toPause(playHover) { 
    playHover.remove(); 
    var pause = paper.image("images/pause.png", Img.X, Img.Y, Img.height, Img.width); 
    pause.node.onmouseover = toPauseHover(pause); 
    } 

    function toPlayHover(play) { 
    play.remove(); 
    var playHover = paper.image("images/play-hover.png", Img.X, Img.Y, Img.height, Img.width); 
    playHover.node.onclick = toPause(playHover); 
    } 

    function toPauseHover(pause) { 
    pause.remove(); 
    var pauseHover = paper.image("images/pause-hover.png", Img.X, Img.Y, Img.height, Img.width); 
    pauseHover.node.onclick = toPlay(pauseHover); 
    } 

    var play = paper.image("images/play.png", Img.X, Img.Y, Img.height, Img.width); 
    toPlayHover(play); 

我不知道爲什麼,這並不工作,因爲螢火蟲是不是給我在控制檯中的任何錯誤,但我認爲這是因爲toPlayHover()功能不能在toPlay()函數中調用。

在此先感謝您的幫助!

回答

1

這是因爲您立即調用每個函數而不是將其註冊爲回調函數。要修復,將每個回調包裝在匿名函數中,如下所示:

play.node.onmouseover = function() { toPlayHover(play); }; 
+0

Ouaou,非常感謝您!我會在一百萬年內從未想過這件事!我解決了它,它的工作原理! –