<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>javascript Archive - Maximilian Krieg</title>
	<atom:link href="https://maximiliankrieg.de/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>https://maximiliankrieg.de/tag/javascript/</link>
	<description>Wissen, Technik &#38; Erfahrungen</description>
	<lastBuildDate>Sat, 30 May 2026 20:14:41 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://maximiliankrieg.de/wp-content/uploads/2026/05/cropped-20260524_logo_2_512-2-32x32.png</url>
	<title>javascript Archive - Maximilian Krieg</title>
	<link>https://maximiliankrieg.de/tag/javascript/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Download von PDF-Dateien aus Viewer.js</title>
		<link>https://maximiliankrieg.de/2024/06/download-von-pdf-dateien-aus-viewer-js/</link>
					<comments>https://maximiliankrieg.de/2024/06/download-von-pdf-dateien-aus-viewer-js/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Sat, 01 Jun 2024 14:34:49 +0000</pubDate>
				<category><![CDATA[Nützliches]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[viewer.js]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=651</guid>

					<description><![CDATA[<p>Heute bin ich auf eine Webseite gestoßen, die ein für mich interessantes PDF in einem Online-PDF-Reader bereitstellt. Dieser Reader verfügt normalerweise über eine Download-Funktion, die&#8230;</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2024/06/download-von-pdf-dateien-aus-viewer-js/">Download von PDF-Dateien aus Viewer.js</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Heute bin ich auf eine Webseite gestoßen, die ein für mich interessantes PDF in einem Online-PDF-Reader bereitstellt. Dieser Reader verfügt normalerweise über eine Download-Funktion, die in diesem Fall jedoch durch spezifische Einstellungen im JavaScript-basierten Reader deaktiviert wurde. In diesem Artikel beschreibe ich einen Weg diese Blockierung zu umgehen.</p>



<p class="wp-block-paragraph">Ein direkter Download der Datei &#8222;mypdf.pdf&#8220; unter Angabe des Pfades ist nicht möglich, da dies vom Webserver scheinbar selbst unterbunden wird. Der Quellcode der Webseite lautet wie folgt:</p>



<pre class="wp-block-code"><code>&lt;head>
&lt;meta charset="utf-8">
&lt;meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1">
&lt;title>Title&lt;/title>
&lt;script src="pdf.viewer2.js">&lt;/script>
&lt;link href="//mydata.com/data/mypdf.pdf" rel="preconnect">
&lt;link href="//mydata.com/data/mypdf.pdf" rel="dns-prefetch">
&lt;/head></code></pre>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a370f63d261a&quot;}" data-wp-interactive="core/image" data-wp-key="6a370f63d261a" class="wp-block-image is-style-default wp-lightbox-container"><img fetchpriority="high" decoding="async" width="1024" height="245" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://maximiliankrieg.de/wp-content/uploads/2024/06/20240601_download_deny-1024x245.png" alt="" class="wp-image-655" srcset="https://maximiliankrieg.de/wp-content/uploads/2024/06/20240601_download_deny-1024x245.png 1024w, https://maximiliankrieg.de/wp-content/uploads/2024/06/20240601_download_deny-300x72.png 300w, https://maximiliankrieg.de/wp-content/uploads/2024/06/20240601_download_deny-768x184.png 768w, https://maximiliankrieg.de/wp-content/uploads/2024/06/20240601_download_deny.png 1144w" sizes="(max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Download der PDF-Datei unter Angabe der URL ist unterbunden</figcaption></figure>



<p class="wp-block-paragraph">Nach kurzer Recherche im Internet fand ich den Hinweis, dass die relevanten Befehle des PDF-Readers in der Regel weiterhin vorhanden sind und daher direkt über die Konsole des Browsers gesteuert werden können. Dabei wird das für den Download relevante Klick-Event des ausgeblendeten Download-Buttons ausgelöst. Um dies zu erreichen, muss der folgende Befehl ausgeführt werden:</p>



<pre class="wp-block-code"><code>document.getElementById('download').click()</code></pre>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a370f63d2a30&quot;}" data-wp-interactive="core/image" data-wp-key="6a370f63d2a30" class="wp-block-image wp-lightbox-container"><img decoding="async" width="1024" height="183" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://maximiliankrieg.de/wp-content/uploads/2024/06/20240601_download_pdf-1024x183.png" alt="" class="wp-image-652" srcset="https://maximiliankrieg.de/wp-content/uploads/2024/06/20240601_download_pdf-1024x183.png 1024w, https://maximiliankrieg.de/wp-content/uploads/2024/06/20240601_download_pdf-300x54.png 300w, https://maximiliankrieg.de/wp-content/uploads/2024/06/20240601_download_pdf-768x137.png 768w, https://maximiliankrieg.de/wp-content/uploads/2024/06/20240601_download_pdf.png 1118w" sizes="(max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Manuelle Aktivierung des Klicks auf dem Download-Button via Konsole</figcaption></figure>



<p class="wp-block-paragraph">Nach Ausführung des Befehls startet der Download der PDF-Datei. Es kann jedoch notwendig sein, wenn der PDF-Reader in einem iFrame eingebettet ist, dass die Webseite des iFrame vorher direkt aufgerufen werden muss.</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2024/06/download-von-pdf-dateien-aus-viewer-js/">Download von PDF-Dateien aus Viewer.js</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2024/06/download-von-pdf-dateien-aus-viewer-js/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Simple Stoppuhr mit JavaScript und HTML (V2)</title>
		<link>https://maximiliankrieg.de/2017/03/simple-stoppuhr-mit-javascript-und-html-v2/</link>
					<comments>https://maximiliankrieg.de/2017/03/simple-stoppuhr-mit-javascript-und-html-v2/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Sun, 19 Mar 2017 22:08:00 +0000</pubDate>
				<category><![CDATA[Nützliches]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=2419</guid>

					<description><![CDATA[<p>Auf die Rückfrage hin, ob ich die zuvor beschriebene Variante meiner&#160;simplen Stoppuhr&#160;noch weiter vereinfachen könnte, habe ich mich nochmal an den Code gesetzt und ihn&#8230;</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2017/03/simple-stoppuhr-mit-javascript-und-html-v2/">Simple Stoppuhr mit JavaScript und HTML (V2)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Auf die Rückfrage hin, ob ich die zuvor beschriebene Variante meiner&nbsp;<a href="https://maximiliankrieg.de/2016/01/simple-stoppuhr-mit-javascript-und-html/" type="post" id="2427">simplen Stoppuhr</a>&nbsp;noch weiter vereinfachen könnte, habe ich mich nochmal an den Code gesetzt und ihn etwas modifiziert. Eine allgemeine und sinnvolle Änderung ist die Positionierung der Aktionsfelder über der eigentlichen Ausgabe. Anstatt die Knöpfe zu deaktivieren, werden sie nun ausgeblendet, wodurch der Mauszeiger auf seiner aktuellen Position verweilen kann. Weiterhin wird in der neuen Variante, wie angefragt, auf eine Restart-Funktion verzichtet. Der Code hierzu findet sich im Artikel.</p>



<h3 class="wp-block-heading">Ansicht der Stoppuhr</h3>



<p class="wp-block-paragraph">Wie in der folgenden Abbildung zu sehen ist, habe ich auf die Ausgabe der exakten Uhrzeit verzichtet, da diese primär zur Überprüfung in der vorherigen Variante genutzt wurde.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a370f63d3a55&quot;}" data-wp-interactive="core/image" data-wp-key="6a370f63d3a55" class="wp-block-image size-full wp-lightbox-container"><img decoding="async" width="886" height="261" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://maximiliankrieg.de/wp-content/uploads/2026/05/20170325-technik-stoppuhr.png" alt="" class="wp-image-2420" title="Darstellung der Zustände Start- und Stopp in der Stoppuhr" srcset="https://maximiliankrieg.de/wp-content/uploads/2026/05/20170325-technik-stoppuhr.png 886w, https://maximiliankrieg.de/wp-content/uploads/2026/05/20170325-technik-stoppuhr-300x88.png 300w, https://maximiliankrieg.de/wp-content/uploads/2026/05/20170325-technik-stoppuhr-768x226.png 768w" sizes="(max-width: 886px) 100vw, 886px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Darstellung der Zustände Start- und Stopp in der Stoppuhr</figcaption></figure>



<p class="wp-block-paragraph">In Version 2 wird lediglich die summierte Zeit angezeigt und je nach aktuellem Zustand der zur Verfügung stehende Button.</p>



<h3 class="wp-block-heading">Programmcode</h3>



<pre class="wp-block-code"><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;title&gt;Stoppuhr&lt;/title&gt;
&lt;style&gt;
    .myWatch {
        border: 1px solid black;
        margin: 1rem;
        padding: 1rem;
        background-color: grey;
        width: 25rem
    }
&lt;/style&gt;

&lt;body&gt;
    &lt;script&gt;
        var runTime = 0;
        var startTime = 0;

        function addItem(varText) {
            var entry = document.createElement('li');
            entry.appendChild(document.createTextNode(varText));
            document.getElementById('myLog').appendChild(entry);
        }

        function init() {
            document.getElementById("btn_pause").style.display = "none";
        }

        function startWatch() {
            startTime = new Date();
            document.getElementById("btn_pause").style.display = 'block';
            document.getElementById("btn_start").style.display = 'none';
        }

        function pause() {
            runTime = runTime + new Date().getTime() - startTime.getTime();
            addItem("Laufzeit: " + runTime / 1000 + "s");
            document.getElementById("btn_start").style.display = 'block';
            document.getElementById("btn_pause").style.display = 'none';
        }
    &lt;/script&gt;
    &lt;div class="myWatch"&gt;
        &lt;h1&gt;Stoppuhr&lt;/h1&gt;
        &lt;input name="btn_start" id="btn_start" onclick="startWatch();" type="button" value="Start" /&gt;
        &lt;input name="btn_pause" id="btn_pause" onclick="pause();" type="button" value="Pause" /&gt;
        &lt;ol id="myLog"&gt;&lt;/ol&gt;
    &lt;/div&gt;
    &lt;script&gt;
        init();
    &lt;/script&gt;
&lt;/body&gt;

&lt;/html&gt;</code></pre>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2017/03/simple-stoppuhr-mit-javascript-und-html-v2/">Simple Stoppuhr mit JavaScript und HTML (V2)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2017/03/simple-stoppuhr-mit-javascript-und-html-v2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Simple Stoppuhr mit JavaScript und HTML</title>
		<link>https://maximiliankrieg.de/2016/01/simple-stoppuhr-mit-javascript-und-html/</link>
					<comments>https://maximiliankrieg.de/2016/01/simple-stoppuhr-mit-javascript-und-html/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Wed, 13 Jan 2016 22:15:00 +0000</pubDate>
				<category><![CDATA[Nützliches]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=2427</guid>

					<description><![CDATA[<p>Vor einigen Tagen habe ich ein kleines JavaScript für ein Formular geschrieben, das zur Erfassung von Tätigkeitsdauern genutzt wird. Das Design und die Funktionsweise ist&#8230;</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2016/01/simple-stoppuhr-mit-javascript-und-html/">Simple Stoppuhr mit JavaScript und HTML</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Vor einigen Tagen habe ich ein kleines JavaScript für ein Formular geschrieben, das zur Erfassung von Tätigkeitsdauern genutzt wird. Das Design und die Funktionsweise ist sehr rudimentär gehalten, da keine genauen Anforderungen diesbezüglich spezifiziert wurden.</p>



<p class="wp-block-paragraph">Die folgende Abbildung zeigt die exemplarische Anwendung von Start, Pause, Start, Pause und Ende. Danach beschreibe ich die grundlegenden Ideen hinter meiner Implementierung und den vollständigen Code.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a370f63d4ab7&quot;}" data-wp-interactive="core/image" data-wp-key="6a370f63d4ab7" class="wp-block-image size-full wp-lightbox-container"><img loading="lazy" decoding="async" width="527" height="278" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://maximiliankrieg.de/wp-content/uploads/2026/05/20160313-technik-beispiel.png" alt="" class="wp-image-2428" title="Exemplarische Ausführung der Stoppuhr von Start bis Ende" srcset="https://maximiliankrieg.de/wp-content/uploads/2026/05/20160313-technik-beispiel.png 527w, https://maximiliankrieg.de/wp-content/uploads/2026/05/20160313-technik-beispiel-300x158.png 300w" sizes="auto, (max-width: 527px) 100vw, 527px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Exemplarische Ausführung der Stoppuhr von Start bis Ende</figcaption></figure>



<p class="wp-block-paragraph">Im folgenden Listing ist der vereinfachte HTML-Code und das entsprechende JavaScript aufgeführt. Mit einer Start-Pause-Funktion ist es möglich Unterbrechungen abzubilden. Die Steuerelemente werden dynamisch aktiviert und deaktiviert. Dies geschieht in Abhängigkeit der jeweiligen Zustände. Da das vordefinierte Formular ein paar technische Herausforderungen beinhaltet, habe ich mich gegen eine visuelle Repräsentation mit automatischer Aktualisierung entschieden. Stattdessen werden Zeitstempel gespeichert und angezeigt, um zeitliche Differenzen abzubilden.</p>



<pre class="wp-block-code"><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
   &lt;title&gt;Stoppuhr&lt;/title&gt;
   &lt;body&gt;
      &lt;script&gt;
         function addItem(varText) {
            var entry = document.createElement('li');
            entry.appendChild(document.createTextNode(varText));
            document.getElementById('myLog').appendChild(entry);
         }

         function disableButtons(bStart, bPause, bEnd, bRestart) {
            document.getElementById("btn_start").disabled = bStart;
            document.getElementById("btn_pause").disabled = bPause;
            document.getElementById("btn_end").disabled = bEnd;
            document.getElementById("btn_restart").disabled = bRestart;
         }

         function restart() {
            runTime = 0;
            start();
         }

         function start() {
            startTime = new Date();
            addItem("Start:" + new Date());
            disableButtons(true, false, false, true);
			runState = 0;
         }

         function pause() {
			
            runTime = runTime + new Date().getTime() - startTime.getTime();
            addItem("Pause: " + new Date());
            addItem("Laufzeit: " + runTime / 1000 + "s");
            disableButtons(false, true, false, true);
			runState = 1;
         }

         function end() {
		    if (runState==0){
               runTime = runTime + new Date().getTime() - startTime.getTime()};
			
			if (runState==1){
			   //
			}
			   
            addItem("Ende: " + new Date());
            addItem("Laufzeit: " + runTime / 1000 + "s bzw. " + runTime / 60000 + "m");
            addItem("Aufgerundet: " + Math.ceil(runTime / 60000) + "m");
            disableButtons(true, true, true, false);
			runState=2;
         }
      &lt;/script&gt;
      &lt;h1&gt;Laufzeit&lt;/h1&gt;
      &lt;ol id="myLog"&gt;&lt;/ol&gt;
      &lt;input name="btn_start" id="btn_start" onclick="start();" type="button" value="Start" /&gt;
      &lt;input name="btn_pause" id="btn_pause" onclick="pause();" type="button" value="Pause" /&gt;
      &lt;input name="btn_end" id="btn_end" onclick="end();" type="button" value="Ende" /&gt;
      &lt;input name="btn_restart" id="btn_restart" onclick="restart();" type="button" value="Restart" /&gt;
      &lt;script&gt;
         var runTime;
         var startTime;
         var runState;
         restart();
      &lt;/script&gt;
   &lt;/body&gt;
&lt;/html&gt;</code></pre>



<p class="wp-block-paragraph">Die folgende Abbildung zeigt die definierten Zustände meiner Stoppuhr. An dieser Stelle ist zu sagen, dass die Implementierung der Funktionen sicherlich besser machbar ist, aber für die definierten Anforderungen ausreichend ist.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a370f63d4f6b&quot;}" data-wp-interactive="core/image" data-wp-key="6a370f63d4f6b" class="wp-block-image size-large wp-lightbox-container"><img loading="lazy" decoding="async" width="1024" height="373" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://maximiliankrieg.de/wp-content/uploads/2026/05/20160313-technik-zustaende-1024x373.png" alt="" class="wp-image-2429" title="Zustandswechsel beschrieben anhand der JavaScript-Funktionen" srcset="https://maximiliankrieg.de/wp-content/uploads/2026/05/20160313-technik-zustaende-1024x373.png 1024w, https://maximiliankrieg.de/wp-content/uploads/2026/05/20160313-technik-zustaende-300x109.png 300w, https://maximiliankrieg.de/wp-content/uploads/2026/05/20160313-technik-zustaende-768x280.png 768w, https://maximiliankrieg.de/wp-content/uploads/2026/05/20160313-technik-zustaende.png 1139w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Zustandswechsel beschrieben anhand der JavaScript-Funktionen</figcaption></figure>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2016/01/simple-stoppuhr-mit-javascript-und-html/">Simple Stoppuhr mit JavaScript und HTML</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2016/01/simple-stoppuhr-mit-javascript-und-html/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
