2011-12-17 2 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, переменные не должны начинаться с '$'. Его вид uggly;) –

+0

Я полностью согласен ... Я только что изменил это, потому что я неправильно понял другое решение моей проблемы. Хах. ** fixed ** – Tom

+1

@ldiqual: Правильно, но начало переменной с '$' часто используется, чтобы подчеркнуть, что эта переменная содержит объект jQuery, а не элемент DOM. Хотя на самом деле это не так, и поэтому еще более запутанно. –

ответ

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
  • хранить ссылку на каждый объект Audio в качестве элемента массива в глобальном массиве Audios; используя уникальный идентификатор, как индекс
  • lastPlay теперь содержит только уникальный идентификатор последнего воспроизводимого аудио-элемента; Я использую его для доступа к соответствующему объекту в массиве Audios и при необходимости устанавливаю relavent playing.
+0

Большое вам спасибо за это. Я очень ценю это. Я на самом деле просто возился с быстрым экспериментом: http://www.rgbjoy.com/2011 - Ты много помог мне. – Tom

+0

@Tom Happy to help; отличный сайт =) – Shad

Смежные вопросы