Wir haben versucht, das nach der Anleitung zum Timer aufzubauen und sind dennoch bisher zu keiner Lösung gekommen. Zurzeit haben wir immer noch das Problem, dass nach Ablauf der Zeit nicht zum nächsten Block gesprungen wird, da der Schieberegler als Pflichtfrage besteht.
Ohne Randomisierung konnten wir den goToPage() Befehl nutzen, dort hat es dann geklappt. Leider bekommen wir das nicht in die Randomisierung übertragen.
Haben Sie noch einen Tipp? Vielen Dank im Voraus!
Hier der derzeitige Code (erst danach folgt der Schieberegler) für die erste Seite eines zweiseitigen Blocks. Nach Ablauf der Zeit sollte es eigentlich zur in der Randomisierung gezogenen nächsten Block springen:
<!-- Anzeigeelement -->
<div id="timeDisplay"
style="font-size:200%;margin:16px 0;text-align:center">–</div>
<script type="text/javascript">
var timeLeft = %timeLeft%; // Platzhalter wird per PHP ersetzt
var timeStart = new Date();
function updateCountdown() {
var remain = timeLeft - Math.floor((new Date() - timeStart)/1000);
if (remain <= 0) {
remain = 0;
clearInterval(timerInterval);
// optional:
// alert("Die Zeit ist vorbei.");
SoSciTools.submitPage(); // automatisch weiter
}
var m = Math.floor(remain/60);
var s = String(remain - m*60).padStart(2,"0");
document.getElementById("timeDisplay").textContent = m + ":" + s;
}
var timerInterval = setInterval(updateCountdown, 250);
updateCountdown();
</script>
----
/* 0 | Wenn Timer schon abgelaufen → Restzeit auf 0 setzen */
if (isset($timeout) && time() >= (int)$timeout) {
$timeLeft = 0; // JS springt gleich weiter
} else {
/* 1 | Seite & Zeitlimit holen -------------------------------- */
$pageID = info('pageID'); // z. B. V0101
$seconds = $durPages[$pageID]; // 20 oder 40 s
/* 2 | Timer nur einmal pro Block anlegen --------------------- */
if (!isset($timeout)) {
$timeout = time() + $seconds;
registerVariable($timeout);
}
$timeLeft = $timeout - time(); // verbleibende Sekunden
}
/* 3 | Countdown-Baustein einfügen -------------------------------- */
show('V109', ['%timeLeft%' => $timeLeft]); // V109 = dein JS-Countdown
Hier der Code der zweiten Seite des zweiseitigen Blocks:
<!-- Anzeigeelement -->
<div id="timeDisplay"
style="font-size:200%;margin:16px 0;text-align:center">–</div>
<script type="text/javascript">
var timeLeft = %timeLeft%; // Platzhalter wird per PHP ersetzt
var timeStart = new Date();
function updateCountdown() {
var remain = timeLeft - Math.floor((new Date() - timeStart)/1000);
if (remain <= 0) {
remain = 0;
clearInterval(timerInterval);
// optional:
// alert("Die Zeit ist vorbei.");
SoSciTools.submitPage(); // automatisch weiter
}
var m = Math.floor(remain/60);
var s = String(remain - m*60).padStart(2,"0");
document.getElementById("timeDisplay").textContent = m + ":" + s;
}
var timerInterval = setInterval(updateCountdown, 250);
updateCountdown();
</script>
----
/* 0 | Wenn Timer schon abgelaufen → Restzeit auf 0 setzen */
if (isset($timeout) && time() >= (int)$timeout) {
$timeLeft = 0; // JS springt gleich weiter
} else {
/* 1 | Seite & Zeitlimit holen -------------------------------- */
$pageID = info('pageID'); // z. B. V0101
$seconds = $durPages[$pageID]; // 20 oder 40 s
/* 2 | Timer nur einmal pro Block anlegen --------------------- */
if (!isset($timeout)) {
$timeout = time() + $seconds;
registerVariable($timeout);
}
$timeLeft = $timeout - time(); // verbleibende Sekunden
}
/* 3 | Countdown-Baustein einfügen -------------------------------- */
show('V109', ['%timeLeft%' => $timeLeft]); // V109 = dein JS-Countdown