Ich habe eine Himbeer-Pi, die ein Garagentor nahe Ereignis nach einer Verzögerung von 90s initiiert. Es ist mir gelungen, den Countdown-Timer auf einer Webseite dynamisch zu aktualisieren, aber aus irgendeinem Grund ist der Countdown unberechenbar und flackert ständig mit niedrigeren und dann höheren Zahlen.Javascript Countdown-Timer ist unberechenbar
Klar muss ich etwas erneuern, aber unnötig zu sagen, dass ich viele Stunden in Foren verbracht habe, aber ohne Erfolg. Ich hoffe, dass jemand meinen Code sehen und mir eine Richtung geben kann.
<?php
$pinInput = trim(shell_exec("gpio read 26"));
$pinOutput = trim(shell_exec("gpio read 2"));
if ($pinInput!=$pinOutput){
echo "Timing for auto reclose...";
?>
<br>
<b><span id="countdown">90</span> Seconds</b>
<script type="text/javascript">
var timer = 90,
el = document.getElementById('countdown');
(function t_minus() {
'use strict';
el.innerHTML = timer--;
if (timer >= 0) {
setTimeout(function() {
t_minus();
}, 1000);
} else {
// do stuff, countdown has finished.
}
}());
</script>
<?php
}
elseif ($pinInput=1)
{
echo "Monitoring input...";
}
else
{
echo "Garage door is closing...";
}
?>
sollte ich auch erwähnt, dass das obige Stück Code in einer Datei timing.php genannt wird. Dies wird auf index.php wie folgt aufgerufen:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"></script>
<script type="text/javascript">
var auto_refresh = setInterval(
function()
{
$('#Input').load('timing.php');
}, 1000); // refresh every 1000 milliseconds
</script>
Also zusammenfassend, was würde ich ist wie für „Timing für Auto Einsiedlerin ...“ statisch bleiben if ($ pinInput = $ pinOutput!), Aber dynamisch zeigte den Countdown aus den 90er Jahren.
1) Rufen Sie an anderer Stelle 't_minus' an? Es klingt, als ob Sie ein paar verschiedene asynchrone Funktionen ausführen. 2) Sie sollten '$ pinInput = 1' in' $ pinInput == 1' ändern. '==' ist zum Vergleich, '=' ist für die Zuweisung. –
Sie laden diese 'timing.php' Seite einmal pro Sekunde neu, und * innerhalb * dieses Codes starten Sie diesen Zeitablauf erneut. Sie starten im Grunde viele und viele redundante Timer. – Pointy