2017-04-13 6 views
1
var startTime = parent.startTime; 
var endTime = parent.endTime; 
var divID = '#'+parent.divId; 
var description = parent.description; 

do { 
    var currentTime1 = $('video').get(0).currentTime; 
    if(currentTime1 >= startTime) { 
     console.log('in if');alert('hi'); 
     parent.$(divID).append(description); 
    } 
    setTimeout(function(){$('video').get(0).currentTime = $('video').get(0).currentTime + 1; currentTime1 = parseInt($('video').get(0).currentTime); }, 1000); 

} while (currentTime1 <= endTime); 

parent.$(divID).empty(); console.log('at end'); 

der obige Code nimmt nicht mehr reagiert und debuger zeigt diese Zeile var currentTime1 = $ ('Video') erhalten (0) .currentTime.Javascript nicht mehr reagiert, während Video-Player aktuelle Zeit

+0

Haben Sie die Konsole für irgendeinen Ausgang dort geschaut, wenn es passiert? Wenn ja, bitte posten Sie es. – Difster

+0

bedeutet, dass Sie in eine Endlosschleife eintreten. Protokollieren Sie einfach currentTime1 und endTime, um festzustellen, ob es sich um gültige Zeitobjekte handelt –

+0

currentTime wird immer 0 nicht inkrementiert und endtime ist 15. Skript wird jedoch beim ersten Mal in dieser Zeile angehalten currentTime1 = $ ('video'). get (0) .currentTime ; – arun

Antwort

1
var startTime = parent.startTime; 
      var endTime = parent.endTime; 
      var divID = '#'+parent.divId; 
      var description = parent.description; 

      var myVar = setInterval(check,1000); 
function check() 
     { 
      var currentTime1 = parseInt($('video').get(0).currentTime); 

      if(currentTime1 >= parent.endTime) 
      { 
       clearInterval(myVar); 
       parent.$(divID).empty(); 
      } 
      else if(currentTime1 >= parent.startTime) 
      { 
       parent.$(divID).empty(); 
       parent.$(divID).append(description);      
      } 
     } 

dieser Code funktioniert ohne Schleifenkonstrukt. setInterval() funktioniert, um die Aktion immer wieder zu wiederholen.

2

Ihr Code wird auf Endlosschleife wegen

do { 
    var currentTime1 = $('video').get(0).currentTime; 
} while (currentTime1 <= endTime); 

Es ist so schnell ausgeführt, wie Ihr Browser erlaubt, so bekommen es klemmt, weil setTimeout wird nach 1s und Ihre currentTime1 wird sich nie ändern ausgeführt werden.

Bitte Logik ändern - use video events, like timeupdate

+0

Debugger zeigt Script-Halt bei $ ('Video'). Get (0) .currentTime Code – arun

+0

können Sie bitte sagen, warum currentTime nicht aktualisierten cueernt Zeit des Spielers jedes Mal, wenn ich darauf zugreifen – arun

+0

@arun Sie führen diese 'while' wie 989213 Mal, Ihre Videozeiten werden nicht aktualisiert, weil Ihr Code jede weitere Ausführung blockiert, der Browser erkennt, dass Sie zur Endlosschleife gelangen und diese beenden. – Justinas

Verwandte Themen