Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 10-06-2005, 12:43   #1 (permalink)
Neuer User
 
Benutzerbild von philforge
 
Registriert seit: May 2005
Beiträge: 28
Unhappy Problem mit JS-Countdown in AS

Hi,
ich nutze derzeit auf meiner Site einen JS-Countdown, den ich nun gern in Flash umsetzen möchte.
Der JS-Code schaut so aus:
PHP-Code:
var destination = new Date(2005, 7, 5, 20, 0, 0);
var now = new Date(<?php echo time()*1000 ?>);
window.onload = countDate;
  
function countDate()
{
    var dst = destination;
    now.setSeconds(now.getSeconds()+1);
    var diff = parseInt((dst - now) / 1000);
    if (diff > 0)
    {
        var d = Math.floor(diff / 86400);
        var h = Math.floor((diff % 86400) / 3600);
        var m = Math.floor((diff % 3600) / 60);
        var s = diff % 60;
        m = (m<10)?'0'+m:m;
        s = (s<10)?'0'+s:s;
        document.getElementById("countdown").value = d + " d, " + h + " h, " + m + " m, " + s + " s";
        setTimeout("countDate()", 999);
    }
    else
    {
        document.getElementById("countdown").value = 'Coundown fertig';
    }
}
Funktioniert auch alles bestens.
Zu bewundern unter http://www.alkbrueder.de

Nun hab ich - ohne jegliche AS-Kentnisse - mal versucht, das ganze in Flash zu übertragen.
Dieser AS-Code kam dabei rum:
PHP-Code:
destination = new Date(2005752000);
_root.loadVariables("countdown.php");
now = new Date(jetzt);
function 
countdown() {
    
dst destination;
    
now.setSeconds(now.getSeconds()+1);
    
diff Math.floor((dst-now)/1000);
    if (
diff>0) {
        
Math.floor(diff/86400);
        
Math.floor((diff%86400)/3600);
        
Math.floor((diff%3600)/60);
        
diff%60;
        
= (m<10) ? '0'+m;
        
= (s<10) ? '0'+s;
        
_root.zaehler.text d+" d, "+h+" h, "+m+" m, "+s+" s";
        
setTimeout("countdown()"999);
    } else {
        
_root.zaehler.text 'Coundown fertig';
    }
}
_root.onEnterFrame countdown
countdown.php:
PHP-Code:
<?php
$now 
time()*1000;
echo 
"&jetzt=$now"
?>
Das Ergebnis gibts hier: http://www.alkbrueder.de/countdown/

Nun wird euch sicherlich aufgefallen sein, das der Flash Countdown viel zu schnell läuft
Ich denke, ich weiss auch woran's liegt:
Ich konnte den JS-Code beinahe 1:1 übernehmen, lediglich die Funktion parseInt() scheint es in AS unter diesem Namen nicht zu geben - also hab ich einfach mal folgendes probiert (wie gesagt, ich weiss eigentlich garnicht, was ich hier mache... )

Aus (JS): var diff = parseInt((dst - now) / 1000);
wurde (AS): var diff = Math.floor((dst - now) / 1000);

Das Script läuft so zwar, aber eben viel zu schnell.

Wie muss es nun richtig heissen? Was ist in AS das Äquivalent zu der JS-Funktion parseInt()? Hab ich noch andere Fehler gemacht?


Ich hoffe echt, ihr könnt mir helfen.
Danke!

Geändert von philforge (10-06-2005 um 14:43 Uhr)
philforge ist offline   Mit Zitat antworten
Alt 10-06-2005, 13:33   #2 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
parseInt gibt es schon, aber die Variable "jetzt" kommt nicht so schnell an.
Schau dir mal die Hilfe zu LoadVars an. Dort kannst du eine Funktion ausführen lassen, wenn die Daten geladen sind.

mfg .r
bokel ist offline   Mit Zitat antworten
Alt 10-06-2005, 14:02   #3 (permalink)
Neuer User
 
Benutzerbild von philforge
 
Registriert seit: May 2005
Beiträge: 28
Hmmm....
Ich kan darauf, weil ich jedes mal einen Fehler erhielt, wenn ich einen syntax-Check durchgeführt habe...
Habs jetzt wie folgt abgeändert:
PHP-Code:
...
temp = (dst-now)/1000;
diff parseInt(temp);
... 
Am Fehler selbst hat das aber noch nichts geändert - der Countdow läuft immer noch zu schnell

Wie meinst du das, dass die Variable nicht so schnell für Flash verfügbar ist?
Von welcher Funktion sprichst du? Ich konnte in der Hilfe nichts finden.

*edit*
An der Variablen kann es eigentlich auch nicht liegen. Hab es grad mal ohne diese ausprobiert - also so:
PHP-Code:
now = new Date(); 
Der selbe Effekt - der Countdown arbeitet zu schnell

Geändert von philforge (10-06-2005 um 14:05 Uhr)
philforge ist offline   Mit Zitat antworten
Alt 10-06-2005, 14:21   #4 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Ich meinte das hier

ActionScript:
  1. _root.loadVariables("countdown.php");
  2. // bevor die variable "jetzt" geladen wurde, vergeht eine gewisse Zeit.
  3. //hier ist sie jedenfalls noch nicht gesetzt.
  4. trace("jetzt " +  jetzt);
  5. now = new Date(jetzt);

mfg .r
bokel ist offline   Mit Zitat antworten
Alt 10-06-2005, 14:31   #5 (permalink)
Neuer User
 
Benutzerbild von philforge
 
Registriert seit: May 2005
Beiträge: 28
Jetzt wird nur noch "Countdown fertig" ausgegeben
Ich verzweifel noch daran..............
philforge ist offline   Mit Zitat antworten
Alt 10-06-2005, 14:43   #6 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Wenn du die Seite mit php erzeugst, kannst du jetzt auch direkt an die url deines swfs anhängen und dir loadVariables sparen

ActionScript:
  1. //im html
  2. <param name="movie" value="countdown.swf?jetzt=hier per php den zeitstempel einfügen">
  3. <embed src="countdown.swf?jetzt=hier per php den zeitstempel einfügen"

mfg. r
bokel ist offline   Mit Zitat antworten
Alt 10-06-2005, 15:27   #7 (permalink)
Neuer User
 
Benutzerbild von philforge
 
Registriert seit: May 2005
Beiträge: 28
Aber auch das ändert leider nichts daran, dass er mir immer "Countdown fertig" ausgibt

http://www.alkbrueder.de/countdown/countdown.php

Es muss irgendwo noch ein zweiter Fehler in dem Script stecken...
philforge ist offline   Mit Zitat antworten
Alt 10-06-2005, 21:18   #8 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
aeh, jetzt hast du ja nur das im html, was ich oben angegeben habe, wo ist denn der ganze Rest?

ActionScript:
  1. // nur zum test
  2. // jetzt = "1118434393000";
  3.  
  4. var destination = new Date(2005, 7, 5, 20, 0, 0);
  5. var now = new Date(jetzt);
  6.  
  7. var id = setInterval( function() {
  8.     var dst = destination;
  9.     now.setSeconds(now.getSeconds()+1);
  10.     var diff = Math.floor((dst-now)/1000);
  11.     if (diff>0) {
  12.         var d = Math.floor(diff/86400);
  13.         var h = Math.floor((diff%86400)/3600);
  14.         var m = Math.floor((diff%3600)/60);
  15.         var s = diff%60;
  16.         m = (m<10) ? '0'+m : m;
  17.         s = (s<10) ? '0'+s : s;
  18.         _root.zaehler.text = d+" d, "+h+" h, "+m+" m, "+s+" s";
  19.     } else {
  20.         _root.zaehler.text = 'Coundown fertig';
  21.         clearInterval( id);
  22.     }
  23. }, 999);

und so muss dein Actionscript aussehen,

mfg. r.

Geändert von bokel (10-06-2005 um 21:19 Uhr)
bokel ist offline   Mit Zitat antworten
Alt 11-06-2005, 08:07   #9 (permalink)
Blockwart ;o)
 
Registriert seit: May 2005
Ort: Neu-Anspach (Hoch-Taunus)
Beiträge: 260
Zitat:
Zitat von philforge
Aber auch das ändert leider nichts daran, dass er mir immer "Countdown fertig" ausgibt

http://www.alkbrueder.de/countdown/countdown.php

Es muss irgendwo noch ein zweiter Fehler in dem Script stecken...
argh..was wollt ihr bloß nur immer mit der Variable "jetzt" /now? Das könnt Ihr Euch in AS sparen!

ActionScript:
  1. var now = new Date ()

reicht doch. Gibt immer das aktuelle Datum und die aktuelle Uhrzeit aus...

Hier hab ich mal ein Beispiel von Flashstar.de angepaßt,wo man auch die Uhrzeit setzen kann. Da ist die Differenz mit math.floor auch strukturierter gelöst.

Countdowndaten ändern
__________________
------------
Gruß

Dat Bonsai

hups...Hier gibbet ja auch ne "Suchfunktion"... und---
hups..."F1" drücken kannte ich auch noch nicht ;)

Sternzeichen "Jungfrau" ... das dürfte vieles erklären ;)

Geändert von DatBonsai (11-06-2005 um 08:30 Uhr)
DatBonsai ist offline   Mit Zitat antworten
Alt 11-06-2005, 12:44   #10 (permalink)
Neuer User
 
Benutzerbild von philforge
 
Registriert seit: May 2005
Beiträge: 28
@bokel
Super! Danbke!
Jetzt gehts

@bonsai
ganz einfach:
Ich will mit der serverzeit arbeiten, weil diese nicht verstellt werden kann.
Es soll ja vorkommen, dass die system-zeit beim user verstellt ist...
philforge ist offline   Mit Zitat antworten
Alt 11-06-2005, 13:39   #11 (permalink)
Blockwart ;o)
 
Registriert seit: May 2005
Ort: Neu-Anspach (Hoch-Taunus)
Beiträge: 260
Zitat:
Zitat von philforge
@bonsai
ganz einfach:
Ich will mit der serverzeit arbeiten, weil diese nicht verstellt werden kann.
Es soll ja vorkommen, dass die system-zeit beim user verstellt ist...
Axo...ja klar. Jetzt hab ichs begriffen.
__________________
------------
Gruß

Dat Bonsai

hups...Hier gibbet ja auch ne "Suchfunktion"... und---
hups..."F1" drücken kannte ich auch noch nicht ;)

Sternzeichen "Jungfrau" ... das dürfte vieles erklären ;)
DatBonsai ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 04:29 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele