Ich habe solche JSON-Daten

[
"00-00-02":"first one",
"00-00-04":"the second",
"00-00-09":"third",
.
.
]

Wie kann ich zum Beispiel anzeigen: first one in der angegebenen Zeit 00-00-02 und dann die nächste zur Zeit 00-00-04 anzeigen?
Hinweis : Ich sollte das mit Javascript machen

1
Dot Freelancer 7 Okt. 2012 im 12:13

5 Antworten

Beste Antwort

@Geek Num 88 schlägt den richtigen Weg vor. In solchen Fällen wird normalerweise ein Unix-Zeitstempel verwendet. Falls Sie den JSON nicht ändern können, können Sie so etwas tun

var data = {
"00-00-02":"first one",
"00-00-04":"the second",
"00-00-09":"third"
}
var timeout;
var start = new Date();
function showIt(){
    var now = new Date();
    var diff = now - start;
    var hh = Math.floor(diff / 600000);
    hh = (hh < 10)?"0" + hh : hh;
    var mm = Math.floor((diff % 3600000) / 60000);
    mm = (mm < 10)?"0" + mm : mm;
    var ss = Math.floor((diff % 60000 ) / 1000); 
    ss = (ss < 10)?"0" + ss : ss;

    if(data[hh + "-" + mm + "-" + ss]){
       console.log(data[hh + "-" + mm + "-" + ss]);
    }

    clearTimeout(timeout);
    timeout = setTimeout(showIt, 1000);
}


showIt();
1
Diode 7 Okt. 2012 im 09:34

Sie sollten sich bewusst sein, dass Video-Untertitel bereits eine Sache sind und Sie sie nicht erneut implementieren müssen.

Sie können das track -Element aus HTML5 auswählen, http: // www. html5rocks.com/de/tutorials/track/basics/ oder wenn Sie mehr Kompatibilität benötigen, können Sie popcorn.js verwenden: http://popcornjs.org/.

Wenn Sie das nicht möchten, verwenden Sie einfach ein window.setTimeout, um jedes anzuzeigen.

0
Rich Bradshaw 7 Okt. 2012 im 09:16

Wenn Sie UNIX-Zeit verwenden, können Sie den Vergleich ziemlich einfach durchführen - zum Beispiel

var data = {
   "1349598808" : "first one",
   "1349598845" : "the second",
   "1349599400" : "third"
};

var now;
var seconds;

setInterval(function(){
     now = new Date();
     seconds = Math.round(now.getTime()/1000);
     if(data[seconds] != undefined)
     {
          console.log(data[seconds]);
          // OR 
          // PrototypeJS
          $("mydiv").update(data[seconds]);
          // OR
          // jquery
          $("#mydiv").html(data[seconds]);
     }
},1000);
​
1
andlrc 7 Okt. 2012 im 09:14

Haben Sie eine Reihe von nur Json? Wenn Sie JSON haben, funktioniert Folgendes:

var data = {
  "00-00-02":"first one",
  "00-00-04":"the second",
  "00-00-09":"third"
}

Object.keys(data).forEach(function(key) {
  var val = data[key];
  console.log("the " + val + " had a time of " + key + " seconds")
});
0
zemirco 7 Okt. 2012 im 08:23

Sie können versuchen, mit der Funktion setTimeout(fn, time) nach einem berechneten Intervall "first-one", "the-second" ... aufzurufen. Der Pseudocode wäre so etwas wie

data = ["00-00-02":"first one", "00-00-04":"the second", "00-00-09":"third",...];
//using [key: value] notation
for (i=0; i<data.length; i++) {
    eventTime = timeInMilliSeconds(data[i].key);
    setTimeout(printMyMessage(data[i].value, eventTime);
}

Oder Sie können setTimeout() für data[i] im Funktionsaufruf printMyMessage() für data[i-1] aufrufen. Das zweite Argument für die Funktion setTimeout() in diesem Fall wäre der Zeitunterschied zwischen data[i] und data[i-1].

0
mtariq 7 Okt. 2012 im 09:11