2011-12-17 66 views
2

我做了一個有多個實例的快速音頻播放器。當你點擊播放時,播放 var被設置爲true。如果用戶點擊.playAudio的其他實例,我試圖將lastPlayed實例設置爲false。我將如何更改目標變量?

我有一部分註釋掉了我無法弄清楚的部分。

JQUERY:

var lastPlay 
var lastSelected 
$('.playAudio').each(function(){ 
    var audio = $(this).find('audio').get(0); 
    var playing = false 

    $(this).hover(function() { 
     if (playing) { 
      $(this).css({backgroundPosition: '-60px -60px'}) 
     } else { 
      $(this).css({backgroundPosition: '0px -60px'}) 
     } 
    },function() { 
     if (playing) { 
      $(this).css({backgroundPosition: '-60px 0'}) 
     } else { 
      $(this).css({backgroundPosition: ''}) 
     } 
    }); 

    $(this).click(function(){ 
     if (playing) { 
      playing = false 
      $(this).css({backgroundPosition: '0 60px'}) 
      audio.currentTime = 0 
      audio.pause() 
     } else { 
      if (lastPlay) { 
       //** I'm trying to change the lastSelected's "playing" to false 
       lastPlay.pause() 
      } 
      playing = true 
      $(this).css({backgroundPosition: '-60px -60px'}) 
      audio.play() 
      lastPlay = audio 
      lastSelected = $(this) 
     } 
    }) 
}) 
+2

(與你的問題無關):JS不是PHP,變量不必以`$`開始。它有點不好意思;) – 2011-12-17 00:16:00

+0

我完全同意......我只是改變它,因爲我誤解了我的問題的其他解決方案。哈。 **修正** – Tom 2011-12-17 00:23:54

回答

1

下面是做這件事:

var lastPlay, 
    lastSelected, 
    Audios = []; 
$('.playAudio').each(function(i){ 
    var Audio = {}; 
    Audios[i] = Audio; 
    Audio.audio = $(this).find('audio').get(0); 
    Audio.playing = false; 

    $(this).hover(function() { 
     if (Audio.playing) { 
      $(this).css({backgroundPosition: '-60px -60px'}); 
     } else { 
      $(this).css({backgroundPosition: '0px -60px'}); 
     } 
    },function() { 
     if (Audio.playing) { 
      $(this).css({backgroundPosition: '-60px 0'}); 
     } else { 
      $(this).css({backgroundPosition: ''}); 
     } 
    }); 

    $(this).click(function(){ 
     if (Audio.playing) { 
      Audio.playing = false; 
      $(this).css({backgroundPosition: '0 60px'}); 
      Audio.audio.currentTime = 0; 
      Audio.audio.pause(); 
     } else { 
      if (lastPlay && Audios[lastPlay]) { 
       Audios[lastPlay].audio.pause(); 
       Audios[lastPlay].playing = false; 
      } 
      Audio.playing = true; 
      $(this).css({backgroundPosition: '-60px -60px'}); 
      Audio.audio.play(); 
      lastPlay = i; 
      lastSelected = $(this); 
     } 
    }); 
}); 

我已經在幾個方面改變了你的腳本:

  • 我拍攝第一參數,jQuery傳入.each並將其用作音頻播放器之間的唯一標識符
  • 對於每個音頻播放器的<audio>元件,並且它playing狀態被保存在本地對象Audio
  • 我存儲爲全局陣列Audios在陣列元件到每個Audio對象的引用;使用唯一標識符作爲索引
  • lastPlay現在只保存最後播放的音頻元素的唯一標識符;我用它來訪問Audios數組中的適當對象,並在必要時設置相關playing