Inline-SVG steuern - Quelltext
zurück zur Demo-Seite
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Inline-SVG steuern</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<style>
body {
font-family:sans-serif;
}
</style>
</head>
<body>
<h1>Inline-SVG steuern</h1>
<p>Hier am Beispiel von drei Leveln</p>
<!-- START SVG-Grafik inline -->
<!-- <?xml version="1.0" encoding="UTF-8" ?> -->
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.1"
width="120" height="70">
<!-- START Skript innerhalb der SVG-Grafik -->
<script type="text/ecmascript">
<![CDATA[
function zeige_level(nr) {
console.log('zeige_level: '+nr);
var objekte_des_levels=document.getElementsByClassName(nr);
//console.log(objekte_des_levels);
for (var i=0; i < objekte_des_levels.length; i++) {
//console.log(objekte_des_levels[i]);
objekte_des_levels[i].setAttribute('visibility', 'visible');
}
var levelanzeige=document.getElementById('levelanzeige_als_text');
console.log(levelanzeige);
levelanzeige.textContent='Level: '+nr;
}
]]>
</script>
<!-- ENDE Skript innerhalb der SVG-Grafik -->
<!-- START Style innerhalb der SVG-Grafik -->
<style>
text {
font-family:monospace;
font-size:16px;
}
circle {
stroke:#bebebe;
stroke-width:1px;
}
</style>
<!-- ENDE Style innerhalb der SVG-Grafik -->
<rect id="hintegrundflaeche" x="0" y="0" width="120" height="70" fill="#f2f2f2"></rect>
<!-- Objekte Level 1 -->
<circle class="eins" cx="10" cy="10" r="5" fill="red" visibility="hidden" />
<text class="eins" x="5" y="35" fill="red" visibility="hidden">1</text>
<!-- Objekte Level 2 -->
<circle class="zwei" cx="30" cy="10" r="5" fill="yellow" visibility="hidden" />
<text class="zwei" x="25" y="35" fill="yellow" visibility="hidden">2</text>
<!-- Objekte Level 3 -->
<circle class="drei" cx="50" cy="10" r="5" fill="green" visibility="hidden" />
<text class="drei" x="45" y="35" fill="green" visibility="hidden">3</text>
<text id="levelanzeige_als_text" x="10" y="60">Level: </text>
</svg>
<!-- END SVG-Grafik inline -->
<p>Prinzip<br />
Das Skript mit der Anzeige bzw. Ausblende-Logik liegt innerhalb der inline SVG-Datei.
Von Außen wird das aktuelle Level als Parameter einer in diesem SVG internen Skript liegenden Funktion übergeben.
</p>
<p>Wie geht das?<br />
Lies den Seitenquelltext der inline-SVG-Grafik dieser Beispielseite mit <kbd>Strg</kbd>+<kbd>U</kbd>
</p>
<p>Wofür?<br />
Mit dieser Technik ließen sich prinzipiell bspw. Lernlandkarten oder
andere selbst gestaltbare Gamification-Elemente in Moodle-Kurse einbauen.</p>
<p>Ausprobieren?<br />
Auskommentieren z.B. des dritten
Skript-Schnipsels mit
vorangestelltem <tt><!--</tt> und
angehängtem <tt>--></tt> und
Neuladen einer lokal gespeicherten Kopie dieser Seite
sollte nur noch die Level 1+2 anzeigen</p>
<p>In Moodle einsetzen?<br />
An Stelle der hier auf dieser Testseite eingesetzten ready Funktion
den jQuery-Nachlade-Schnipsel von
<a href="https://quizdidaktik.de/indilearning2021-moodle-hacks/index.html">quizdidaktik.de/indilearning2021-moodle-hacks</a>
Abschnitt "Inhalte oder Skripte verzögert nachladen" einsetzen und
jeden Skript-Schnipsel in ein eigenes Textfeld verpacken.
Über die jeweilige Zeitverzögerung in der setTimeout Funktion kann die Ladereihenfolge nötigenfalls nachjustiert werden.
</p>
<p>erster Skript-Schnipsel über bedingte Verfügbarkeit</p>
<script>
$(document).ready(function(){
console.log('Schnipsel eins');
zeige_level('eins');
});
</script>
<p>zweiter Skript-Schnipsel über bedingte Verfügbarkeit</p>
<script>
$(document).ready(function(){
console.log('Schnipsel zwei');
zeige_level('zwei');
});
</script>
<p>dritter Skript-Schnipsel über bedingte Verfügbarkeit</p>
<script>
$(document).ready(function(){
console.log('Schnipsel drei');
zeige_level('drei');
});
</script>
</body>
</html>