Zur Navigation

Bitte um denkanstoss

1 deffcon (Gast)

Hallo Experten,

ich bin in Javascript sehr neu und nutze den JWPlayer aus dem Hause Longtailvideo für eine Musiksuchmaschine.

Der User kann in einer Top-Liste und Suchfunktion Lieder suchen und diese in seine Playlist hinzufügen.

Die Playlist ist nur ein div im DOM Baum und wird nicht in eine DB gepflegt oder sonstiges.

Im JS Code wird nun aus dem DIV der Titel und die ID per match extrahiert und daraus dann die Playlist erstellt.

Der Player hat ein onComplete() Event welches aufgerufen wird wenn ein Titel zuende ist.

In diesem Event wird die Playlist neu gematcht (der User kann ja während dem hören den Playlistinhalt oder die Reihenfolge verändert haben) und die Position des aktuellen Titels (getPlaylistItem() des players) mit indexOf im Array der Titel bestimmt. Daraufhin wird der nächste titel abgespielt.

Nun weiß ich nicht wie ich folgende Problematik umgehen kann:

Wenn ein Titel mehrfach in der Playlist vorhanden ist findet indexOf ja das erste Vorkommen. Immer wenn der Player dann bei dem Titel, der mehrfach in der Playlist ist, angekommen ist springt er natürlich zum Lied nach dem ersten Vorkommen zurück.

Und wenn der aktuell abgespielte Titel gelöscht wird fängt die Playlist bei Index 0 an (wegen Zeile 47-51 im Script, wo der geklickte Titel + die PlaylistTitel aufsteigend eingetragen werden wenn der aktuelle Titel nicht oder nicht mehr in der Playlist ist.)

Jetzt die sicherlich erwartete Frage:
Wie konnte ich diese "bugs" fixen?

Hier ein Testlink zur Seite:
http://bewerbung.wmw.cc/play2

Vielen Dank für euere Hilfe !

10.08.2012 16:01

2 Jörg

Könntest du dem Array vielleicht noch eindeutige Identifikationsnummern zufügen, die beim Auswählen zugewiesen werden? Doppelte Titel könnten dadurch unterschieden werden.

10.08.2012 16:32

3 Deffcon (Gast)

Das war am Anfang auch mein Gedanke und Vorhaben aber das Array wird ja im onComplete Event (also sobald ein Lied zuende ist) neu erstellt.

Deshalb kam mir nur der Gedanke, dass in der Playlist im Namen des Titels eine Nummer hinzugefügt werden könnte aber das wäre dann unsinnig, weil die Titel per Drag&Drop in der Reihenfolge verschoben werden können und dann in der Liste ein Durcheinander an Nummerierungen entstehen.

Ich stell mal noch das Script in nen Codeblock:

jwplayer().onPlaylistItem(
function(){
var item = jwplayer().getPlaylistItem();
var itemx = item.title;
document.getElementById('player_titel').innerHTML = 'Sie hören: '+itemx;
}
);


	
	jwplayer().onComplete(
	function() { 
		var completePlaylist = document.getElementById('playlist').innerHTML;
	var matches = [];
	var matchesTitel = [];
	matches = completePlaylist.match(/playVid\('.{11}/gi);
	matchesTitel = completePlaylist.match(/,\s'.{1,40}'\);">/gi);

if(matches == null){} else {
var result = [];
for(var i = 0, il = matches.length;i < il; i++){
var string = matches[i];
result.push(string.substring(9));
	
}}

if(matchesTitel == null){} else {
var resultTitel = [];
for(var i = 0, il = matchesTitel.length;i < il; i++){
var stringTitel = matchesTitel[i];
var endOfTitel = stringTitel.length - 5;
resultTitel.push(stringTitel.substring(3, endOfTitel));
	
}}

	


var links = [];


var currentVidItem = jwplayer().getPlaylistItem();
var currentVidUrl = currentVidItem.file;
var currentVidShort = currentVidUrl.substring(25);
var currentVidTitel = currentVidItem.title;
if(result == null) {links.push({file:'http://www.youtube.com/v/'+currentVidShort , title: currentVidTitel});} 

else if (result.indexOf(currentVidShort) != -1) {
var posInPlaylist = result.indexOf(currentVidShort);
var nextPos = posInPlaylist + 1;
if(nextPos == result.length){links.push({file:'http://www.youtube.com/v/'+result[0] , title: resultTitel[0]});}
else {links.push({file:'http://www.youtube.com/v/'+result[nextPos] , title: resultTitel[nextPos]});}

} 



else {
links.push({file:'http://www.youtube.com/v/'+currentVidShort , title: currentVidTitel});
}
	jwplayer().load(links);
	}
	);

10.08.2012 22:30

Beitrag schreiben (als Gast)





[BBCode-Hilfe]