Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
de:create:javascript:latencytimer [03.05.2022 09:01] – l.toernerde:create:javascript:latencytimer [23.10.2026 14:44] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 9: Zeile 9:
 Das Ziel der Klasse //LatencyTimer// ist es nun, die Differenz zwischen solchen Ereignissen zu messen. Sie können bei der Messung von Reaktionszeiten mittels JavaScript mit einer Genauigkeit <100 ms rechnen. Für die Differenz aus zwei Ereignissen entsprechend mit einer Genauigkeit <200 ms. Das Ziel der Klasse //LatencyTimer// ist es nun, die Differenz zwischen solchen Ereignissen zu messen. Sie können bei der Messung von Reaktionszeiten mittels JavaScript mit einer Genauigkeit <100 ms rechnen. Für die Differenz aus zwei Ereignissen entsprechend mit einer Genauigkeit <200 ms.
  
-===== Vorbereitung ====+===== Vorbereitung =====
  
 Machen Sie die Bibliothek auf der entsprechenden Seite im Fragebogen mittels ''[[:de:create:functions:library]]'' verfügbar. Machen Sie die Bibliothek auf der entsprechenden Seite im Fragebogen mittels ''[[:de:create:functions:library]]'' verfügbar.
Zeile 27: Zeile 27:
  
   * //storage//\\ Eine interne Variable, spezifiziert durch ihre Kennung (z.B. ''"IV01_01"''), durch das HTML-Element oder durch das zur internen Variable gehörige ''SoSciTools.QuestionItem''.   * //storage//\\ Eine interne Variable, spezifiziert durch ihre Kennung (z.B. ''"IV01_01"''), durch das HTML-Element oder durch das zur internen Variable gehörige ''SoSciTools.QuestionItem''.
-  * //storeFirst//\\ Legt fest, ob die Reaktionszeit auch dann aufgezeichet werden soll, wenn es sich um den ersten Klick auf der Seite handelt. Standardmäig wird für den ersten Klick auf der Seite anstatt einer Reaktionszeit der Code ''-7'' gespeichert.+  * //storeFirst//\\ Legt fest, ob die Reaktionszeit auch dann aufgezeichnet werden soll, wenn es sich um den ersten Klick auf der Seite handelt. Standardmäßig wird für den ersten Klick auf der Seite anstatt einer Reaktionszeit der Code ''-7'' gespeichert.
   * //multiStore//\\ Mit dieser Variable wird eine weitere interne Variable festgelegt, welche die Reaktionszeit für weitere Klicks auf das Element zählt. Wird sie verwendet, dann werden die einzelnen Reaktionszeiten addiert und in dieser Variable gespeichert. Standardmäßig wird die Reaktionszeit nur für den ersten Klick auf ein Element gezählt. Weitere Klicks ändern den Wert entweder nicht (wenn die Antwort unverändert bleibt) oder führen zur Speicherung des Codes ''-6'', wenn auf ein anderes Auswahlelement innerhalb des Items oder der Frage geklickt wird (z.B. eine andere Auswahloption einer Auswahlfrage).   * //multiStore//\\ Mit dieser Variable wird eine weitere interne Variable festgelegt, welche die Reaktionszeit für weitere Klicks auf das Element zählt. Wird sie verwendet, dann werden die einzelnen Reaktionszeiten addiert und in dieser Variable gespeichert. Standardmäßig wird die Reaktionszeit nur für den ersten Klick auf ein Element gezählt. Weitere Klicks ändern den Wert entweder nicht (wenn die Antwort unverändert bleibt) oder führen zur Speicherung des Codes ''-6'', wenn auf ein anderes Auswahlelement innerhalb des Items oder der Frage geklickt wird (z.B. eine andere Auswahloption einer Auswahlfrage).
  
Zeile 40: Zeile 40:
 ''void **latencyTimer.registerRadio**(String //prefix//, mixed //storage//, boolean //storeFirst//)'' ''void **latencyTimer.registerRadio**(String //prefix//, mixed //storage//, boolean //storeFirst//)''
  
-Mit ''registerRadio()'' wird die Reaktionszeit zum Klick auf Radio-Buttons ausgezeichnet, welche das angegeben Präfix und eine fortlaufende Nummer verwenden. Das Präfix ''"SK01_01"'' würde z.B. die Auswahlfelder ''"SK01_011"'', ''"SK01_012"'' u.s.w. überwachen. Meist ist die Verwendung von ''latencyTimer.registerItem()'' einfacher.+Mit ''registerRadio()'' wird die Reaktionszeit zum Klick auf Radio-Buttons aufgezeichnet, welche das angegebene Präfix und eine fortlaufende Nummer verwenden. Das Präfix ''"SK01_01"'' würde z.B. die Auswahlfelder ''"SK01_011"'', ''"SK01_012"'' u.s.w. überwachen. Meist ist die Verwendung von ''latencyTimer.registerItem()'' einfacher.
  
 ''void **latencyTimer.registerSelection**(String //auswahlID//, mixed //storage//, boolean //storeFirst//)'' ''void **latencyTimer.registerSelection**(String //auswahlID//, mixed //storage//, boolean //storeFirst//)''
Zeile 53: Zeile 53:
  
 Die Methode ''eventHandler()'' liefert eine Funktion, welche direkt in ''Element.addEventListener()'' verwendet werden kann. So können auch Reaktionszeiten für Ereignisse gespeichert werden, die keine Klicks sind. Die Methode ''eventHandler()'' liefert eine Funktion, welche direkt in ''Element.addEventListener()'' verwendet werden kann. So können auch Reaktionszeiten für Ereignisse gespeichert werden, die keine Klicks sind.
 +
 +''Function **latencyTimer.createItem**(mixed //storage//, boolean //storeFirst//, mixed //multiStore//)''
 +
 +Die Methode ''createItem()'' liefert ein Objekt, welches mittels ''registerEvent()'' die Zeit bis zu einem Ereignis aufzeichnet.
  
  
Zeile 91: Zeile 95:
 In diesem Beispiel wird die Methode ''LatencyTimer.registerItem()'' verwendet, welche die interne Repräsentation der Items in SoSci Survey nutzt ([[:de:create:soscitools]]). Dadurch muss man die Auswahlfelder der Skala nicht einzeln zusammensuchen. In diesem Beispiel wird die Methode ''LatencyTimer.registerItem()'' verwendet, welche die interne Repräsentation der Items in SoSci Survey nutzt ([[:de:create:soscitools]]). Dadurch muss man die Auswahlfelder der Skala nicht einzeln zusammensuchen.
  
-Anstatt in der FOR-Schleife zu zählen, kann man die Items auch direkt aus dem Objekt abfragen, welches die Skala repäsentiert.+Anstatt in der FOR-Schleife zu zählen, kann man die Items auch direkt aus dem Objekt abfragen, welches die Skala repräsentiert.
  
 <code javascript> <code javascript>
 window.addEventListener("load", function() { window.addEventListener("load", function() {
     var timer = new LatencyTimer();     var timer = new LatencyTimer();
-    for (var key in s2.SK01.items) { +    for (var i=1; i<=s2.SK01.items.length; i++) { 
-        var item = s2.SK01.items[key]; +        var item = s2.SK01.item(i); 
-        var itemID = item.id +        var internal = s2.IV01.item(i); 
-        var internal = s2.IV01.item(item.id); +        timer.registerItem(item, internal, true);
-        timer.registerItem(item, internal);+
     }     }
-}+});
 </code> </code>
 +
  
  
Zeile 169: Zeile 173:
 window.addEventListener("load", function() { window.addEventListener("load", function() {
     var timer = new LatencyTimer();     var timer = new LatencyTimer();
-    for (var key in s2.OT01.items) { +    for (var i=1; i<=s2.OT01.items.length; i++) { 
-        var item = s2.OT01.items[key]; +        var item = s2.OT01.item(i); 
-        var itemID = item.id; +        var internalA = s2.IV01.item(i); 
-        var internalA = s2.IV01.item(itemID); +        var internalB = s2.IV02.item(i);
-        var internalB = s2.IV02.item(itemID);+
         item.input.addEventListener(         item.input.addEventListener(
             "keydown",             "keydown",
Zeile 179: Zeile 182:
         );         );
     }     }
 +});
 +</code>
 +
 +Das Abschicken der aktuellen Seite im Fragebogen kann zum Beispiel über das ''submit''-Event des Formulars erfasst werden. In Verbindung mit ''latencyTimer.eventHandler()'' erfasst folgendes Script die Zeit vom (vollständigen) Laden der Seite bis zum Abschicken, und speichert diese Zeit in die interne Variable "IV01_01" (diese muss natürlich auf die Fragebogen-Seite gezogen werden).
 +
 +<code javascript>
 +window.addEventListener("load", function() {
 +    var timer = new LatencyTimer();
 +    var qnrForm = document.getElementById("questionnaireForm");
 +    qnrForm.addEventListener("submit", timer.eventHandler("IV01_01", true));
 +});
 +</code>
 +
 +
 +==== Manuelle Aufzeichnung ====
 +
 +Sie können über ''createItem()'' ein Objekt erzeugen, welches nur die Methode ''registerEvent()'' kennt, und gezielt über andere Events angesteuert werden kann.
 +
 +<code javascript>
 +let timer = new LatencyTimer();
 +let registerA = timer.createItem("IV01_01", true);
 +let registerB = timer.createItem("IV01_02", true);
 +let registerC = timer.createItem("IV01_03", true);
 +
 +document.getElementById("buttonA").addEventListener("click", function(evt) {
 +  doSomething();
 +  registerA.registerEvent(evt);
 }); });
  
 +...
 </code> </code>
de/create/javascript/latencytimer.1651561285.txt.gz · Zuletzt geändert: von l.toerner
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Share Alike 4.0 International
Driven by DokuWiki