2016-07-13 17 views
5

Próbuję dynamicznie zmieniać ścieżki napisów przy kliknięciu przycisku, używając następujących linii kodu. Ale nie zmienia to napisów. Dlaczego?Dynamiczna zmiana podtytułu wideo - 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>

UWAGA:tracksrc w tym przykładzie jest tylko dla kodu demonstracji.

+2

Zobacz artykuł MDN na ten temat https://developer.mozilla.org/en-US/Apps/Fundamentals/Audio_and_video_delivery/Adding_captions_and_subtitles_to_HTML5_video#Subtitle_implementation będzie trzeba zmienić "tryb" elementów w właściwości tablicy 'video.textTracks's – casraf

+0

Uwaga, źródło elementu' track' w stosach nie jest pełną ścieżką – guest271314

+0

Trach src służy tylko do demonstracji – Shin

Odpowiedz

2

Jeśli trzeba zmienić atrybut default na tagu track można wykorzystać następujący skrypt:

działający przykład, proszę sprawdzić DOM, aby zobaczyć wynik (jak wideo i tor src nie są obecne):

https://jsfiddle.net/3hh9kvgd/

można użyć jQuery :eq() Selector w następujący sposób. More info can be found here.

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

Nawiasem mówiąc, stosując :eq() uczynić swój kod zależny od swojej pozycji w DOM <track> i wymagają poprzeczny wszystko DOM, gdy użytkownik kliknie na przycisk, który nie jest bardzo dobre podejście w okresie konserwacji i perfomance .

Zamiast tego możesz odwołać się do swojego <track> przez id i buforować wybór DOM podczas korzystania z jQuery.


$('#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

Ten kod nie zmienia ścieżek – Shin

+0

@ShijinTR y mógłbyś trochę bardziej rozwinąć? Kod w mojej odpowiedzi powoduje zmianę domyślnego tagu dodawania DOM w zależności od tego, który użytkownik wybierze ścieżkę. Utwórz pełne skrzypce z prawdziwym śladem, abyśmy mogli właściwie usunąć problem. – GibboK

+0

DOM się zmienia, ale ścieżka do filmu nie aktualizuje się – Shin