2016-07-13 18 views
5

Ich versuche, die Untertitelspuren dynamisch auf Knopfdruck mit den folgenden Codezeilen zu ändern.Aber es ändert sich nicht die Untertitel.warum?Ändern Untertitel dynamisch Video - HTML5

$('#turnoff').click(function(){ 
 
    $('.player-content-video track').attr('default',false); 
 
}); 
 

 
$('#english').click(function(){ 
 
    $('.player-content-video track').attr('default',false); 
 
    $('.player-content-video track').eq(0).attr('default',false); 
 
}); 
 

 
$('#chinese').click(function(){ 
 
    $('.player-content-video track').eq(1).attr('default',false); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<video class="player-content-video"> 
 
    <track src="sample_video-en.vtt" srclang="en" kind="subtitles" default="true"> 
 
    <track src="sample_video-ch.vtt" default="false" srclang="ch" kind="subtitles"> 
 
    <source src="http://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4"> 
 
</video> 
 
<br/> 
 
<button id="turnoff" >NO SUBTITLE</button> 
 
<button id="english" >ENGLISH</button> 
 
<button id="chinese" >CHINESE</button>

HINWEIS: Die tracksrc in diesem Beispiel ist nur für die Code-Demonstration.

+2

Überprüfen Sie die MDN Artikel zu diesem Thema https://developer.mozilla.org/en-US/Apps/Fundamentals/Audio_and_video_delivery/Adding_captions_and_subtitles_to_HTML5_video#Subtitle_implementation Sie müssen sich ändern der "Modus" der Elemente in der Array-Eigenschaft 'video.textTracks' – casraf

+0

Hinweis: Die Quelle des 'track' -Elements bei stacksnippets ist nicht voller Pfad – guest271314

+0

Der trach src dient nur zur Demonstration – Shin

Antwort

2

Wenn Sie das default Attribut auf Ihrem track Tag ändern müssen können Sie das folgende Skript verwenden:

Arbeitsbeispiel, überprüfen Sie bitte das DOM das Ergebnis zu sehen (als Video und Spur src nicht vorhanden ist):

https://jsfiddle.net/3hh9kvgd/

können Sie jQuery :eq() Selector in der folgenden Art und Weise verwendet werden. More info can be found here.

$('.player-content-video track:eq(0)')

Durch die Art und Weise unter Verwendung von :eq() Code abhängig von Ihrer <track> Position im DOM machen und erfordern quer alle DOM, wenn Benutzer auf eine Schaltfläche, die in Begriff Wartbarkeit und Perfomance nicht wirklich guter Ansatz ist .

Sie können stattdessen Ihre <track> durch ID verweisen und Ihre DOM-Auswahl zwischenspeichern, wenn Sie jQuery verwenden.


$('#turnoff').click(function(){ 
     $('.player-content-video track').attr('default',false); 
    }); 

    $('#english').click(function(){ 
     $('.player-content-video track').attr('default',false); 
     $('.player-content-video track:eq(0)').attr('default',true); 
    }); 

    $('#chinese').click(function(){ 
     $('.player-content-video track').attr('default',false); 
     $('.player-content-video track:eq(1)').attr('default',true); 
    }); 

<video class="player-content-video"> 
    <track src="sample_video-en.vtt" srclang="en" kind="subtitles" default="true"> 
    <track src="sample_video-ch.vtt" default="false" srclang="ch" kind="subtitles"> 
    <source src="myvideo.mp4" type="video/mp4"> 
</video> 
<br/> 
<button id="turnoff" >NO SUBTITLE</button> 
<button id="english" >ENGLISH</button> 
<button id="chinese" >CHINESE</button> 
+0

Dieser Code ändert nicht die Spuren – Shin

+0

@ShijinTR y Könntest du bitte etwas mehr ausarbeiten? Code in meiner Antwort ändern das DOM Hinzufügen Standard-Tag oder nicht abhängig davon, welche Spur Benutzer auswählen. Bitte erstellen Sie eine vollständige Geige mit Ihrem echten Track, damit wir Ihr Problem richtig debuggen können. – GibboK

+0

Das DOM änderte sich, aber die Spur auf dem Video aktualisiert sich nicht – Shin