2016-06-20 5 views
0

私は以下のような要素オプションを設定する関数を持っています。Javascript可変値型の場合

player.onTracksChanged_ = function(event) { 
    // Update the track lists. 
    var lists = { 
    video: document.getElementById('videoTracks'), 
    audio: document.getElementById('audiotrackButton'), 
    text: document.getElementById('captionButton') 
    }; 
    var formatters = { 
    video: function(track) { 
     return track.width + 'x' + track.height + ', ' + 
      track.bandwidth + ' bits/s'; 
    }, 
    audio: function(track) { 
     return 'language: ' + track.language + ', ' + 
     track.bandwidth + ' bits/s'; 
    }, 
    text: function(track) { 
     return 'language: ' + track.language + ' ' + 
     '(' + track.kind + ')'; 
    } 
    }; 

    // Clear the old track lists. 
    Object.keys(lists).forEach(function(type) { 
    var list = lists[type]; 
    while (list.firstChild) { 
     list.removeChild(list.firstChild); 
    } 
    }); 

    // Populate with the new tracks. 
    var tracks = player.getTracks(); 
    tracks.sort(function(t1, t2) { 
    // Sort by language, then by bandwidth. 
    if (t1.language) { 
     var ret = t1.language.localeCompare(t2.language); 
     if (ret) return ret; 
    } 
    return t1.bandwidth - t2.bandwidth; 
    }); 
    tracks.forEach(function(track) { 
    var list = lists[track.type]; 
    var option = document.createElement('option'); 
    option.textContent = formatters[track.type](track); 
    option.track = track; 
    option.value = track.id; 
    option.selected = track.active; 
    list.appendChild(option); 
    }); 
}; 

私は何を達成しようとしていることは「トラック」の各「タイプ」の数が2以上であるかどうかを判断し、この基づいてif文、これは私が持っているものです。 -

  var mediaTracks = player.getTracks();    
      if (mediaTracks.length >= 2) { 
       console.log('there are more than 2 tracks'); 
      } else { 
       console.log('there are less than 2 tracks'); 
      }; 

実際に、私はより多くのこのような何か実行する必要があります - そして、

var mediaTracksVideo = player.getTracks(video) 
var mediaTracksAudio = player.getTracks(audio) 

ような何か: - (mediaTracksAudio> = 2){...

場合 を

しかし、私はplayer.getTracks(オーディオ)を試してみます。コンソールログに「オーディオが定義されていません」と表示されます。

理由は何ですか?

+1

私はそれがパラメータで 'audio'だけでなく、' formatters.audio'または 'lists.audio'でなければならないと思っています –

+0

formatters.audio()は、オーディオが関数として定義されているので大丈夫でしょうか? –

+0

実際、欲しいのは 'player.getTracks( 'audio')' –

答えて

1

player.getTracks(audio)では、変数audioを使用していますが、これは未定義です。おそらくplayer.getTracks( 'audio')を使いたいと思っています。ここで 'audio'は文字列です。

+0

これは正しい方向に向かっていると思いますが、varを使用すると、audioTrackList = player.getTracks( 'audio'); 「オーディオ」タイプのトラックだけを返すようには見えないが、すべてのトラック(コンソールには8を記録すると期待しているが、すべてのビデオ、オーディオ、テキストトラックを含む12を返す) –

+0

質問を更新する必要がある – Keugels

+0

getTracks()関数は非常に畳み込まれています。以下のドキュメントがあります: - https://shaka-player-demo.appspot。getTracks()の定義はありません。 com/docs/api/shakaExtern.html#トラックちなみにID番号と 'タイプ'を指定すると正しくログされますが、ID 0は 'ビデオ'タイプ、トラック4は 'オーディオ'タイプです。 console.log( 'トラックが見つかりました' +トラック[0] ['タイプ'] + '、'トラック[4] ['タイプ'] + '、etc ...'); –

関連する問題