2016-05-17 6 views
0

Der Titel sagt alles. Ich habe eine Liste von LI-Elementen. Wenn auf die Navigation geklickt wird, bekommt die aktive li eine Klasse 'current', aber das dauert eine Sekunde. Aber wenn ich meinen Code verwende, muss ich auf das Nav klicken, dann öffnet sich das li und ich muss erneut klicken, um den Code registrieren zu lassen. Der Ort der Videos kann nicht fest codiert werden! Es muss dynamisch sein.onclick-Funktion erfordert Doppelklick wegen Klassenzuweisungsverzögerung

(function($) { 
$(document).ready(function(){ 
    $('video').each(function() { 
     $(this).get(0).pause(); 
    }); 
    $('.slides').children('li').addClass('test'); 
}); 

$(document).on('click','span',function(){ 

    if ($('li').hasClass('current')) { 
     $('li.test').find('video').each(function() { 
      $(this).get(0).pause(); 
     }); 
     $('li.current.test').find('video').each(function() { 
      $(this).get(0).play(); 
     }); 

    } 
}); 
})(jQuery); 

http://codepen.io/hennysmafter/pen/aNrVKG?editors=1010

Leider werde ich nicht für die nächste Stunde oder so verfügbar sein, aber danach wieder! Alle danken Ihnen für Ihre Hilfe.

+0

OP verwendet http://tympanus.net/codrops/2014/03/13/tilted-content-slideshow/ – Seblor

Antwort

2

fand ich, was das Problem verursacht: wird „.Current“ Klasse, wenn eine Spanne geklickt hat

Sie spielen die Elemente, deren Eltern.

Wenn Sie jedoch auf ein Element klicken, wird die Klasse ".show" angezeigt, und der zuvor ausgewählte Bereich erhält die Klasse ".hide" UND behält die Klasse ".current" bei, bis die Animation beendet ist. .show "&" .hide "-Klasse wird entfernt und die" .current "-Klasse wechselt Elemente.

Eine Lösung ist die Selektoren wie folgt zu ändern:

$(document).on('click','span',function(){ 
     console.log('the if is running'); 
     $('.current, .hide').find('video').each(function() { 
      $(this).get(0).pause(); 
     }); 
     $('.show').find('video').each(function() { 
      $(this).get(0).play(); 
     }); 

}); 

Auf diese Weise, wenn eine Spanne geklickt wird, pausieren Sie das Element, dessen Eltern die „.Hide“ Klasse haben, und spielen diejenigen, deren Eltern habe die Klasse ".show". Eine andere Lösung sollte ein Ereignis erstellen, wenn eine Klasse angewendet wird (siehe jQuery - Fire event if CSS class changed).

+0

Vielen Dank für Ihre Antwort. Ich laufe gerade mit dem Hund und werde deinen Code in ca. 30 - 45 Minuten ausprobieren. Hast du deinen Code im Codepen getestet? – purple11111

+0

Probieren Sie einfach Ihren Code und es funktioniert nicht nur in der Codepen: http://codepen.io/hennysmafter/pen/LNodZd?editors=1010 Es funktioniert auch auf der Website, ich brauche es. Vielen Dank für diesen Code, es hilft mir sehr! – purple11111

+0

Konnten Sie diese Antwort auch an schicken: http://stackoverflow.com/questions/37277923/tiltslider-play-pause-video-elements-if-lihas-class-current-/ Dies war die erste Frage, die ich machte in Bezug auf dieses Thema. Ich habe eine andere Frage gestellt, weil der Code in der vorherigen Frage so geändert wurde, dass er nicht mehr wirklich passte. Und der Titel war falsch. Ich habe bereits meine eigene Antwort geschrieben und klargestellt, dass du es warst, die die Antwort geliefert hat, aber es wäre besser, wenn du eine Antwort postest, damit ich dich belohnen kann, wie du die Credits verdienst und nicht ich. – purple11111