Hallo Markus,
Ein "stop" gibt es für Videos nicht. Nur play und pause.
Dass das Video nicht losläuft, ist eine Paranoia-Funktion der Browser. Da sich massenhaft Leute beschwert haben, deren PC im Büro plötzlich losplärrte oder -stöhnte, weil ein Autoplay-Video Ton hatte, ist ein automatisches Starten von Videos nur noch zulässig, wenn das Video stummgeschaltet ist. Das erreichst Du mit dem muted Attribut.
Die Alternative ist ein Button "Slideshow starten" oder so, der die Slideshow startet - der Benutzer muss einmalig mit der Seite interagiert haben, damit ein automatisches Starten von Medien möglich ist. Da reicht schon ein Klick ins Nichts - ein "Starten" Button ist aber deutlich netter.
Und dann sollte das funktionieren.
Teil 1: Wegblenden (wo display:none gesetzt wird) - da prüfst Du, ob das DOM Element eine pause Methode hat und rufst sie bei Vorhandensein auf.
Teil 2: Einblenden (wo display:block gesetzt wird) - da prüfst Du auf die play-Methode und rufst die auf.
Es ist dafür etwas übersichtlicher, wenn Du das aktuelle Slide-Objekt in eine Variable legst.
var i;
var x = document.getElementsByClassName("mySlides");
for (i = 0; i < x.length; i++) {
var slide = x[i];
slide.style.display = "none";
if (slide.pause)
slide.pause();
}
slideIndex++;
if (slideIndex > x.length) { slideIndex = 1 }
var slide = x[slideIndex - 1];
slide.style.display = "block";
if (slide.play) {
slide.currentTime = 0;
slide.play();
}
progressBarTimeout = slide.dataset.timeout;
progressBarWidth = 0;
setTimeout(carousel, progressBarTimeout);
Grundsätzlich ist dieses Beispiel mal wieder ein Fall von "W3Fools". Dieser Code ist für sich allein wohl verwendbar, aber sobald auf der Seite mehr Script unterwegs ist, kollidiert alles miteinander. Da muss Modularisierung her; ich fürchte nur, deine JavaScript-Kenntnisse sind nicht wirklich hinreichend, um das zu verstehen. Aber schau mal ins Selfhtml WIKI, unter Modularisierung. Speziell: Kapselung im Funktions-Scope. Das ist nicht ganz trivial, man muss dafür ein paar Feinheiten von JS verstehen, aber es lohnt sich wenn man viel Script auf eine Seite bringen will.
Dein Progress-Bar ist etwas, dass Du am besten ganz schnell wieder entfernst. Es gibt 3 Alternativen:
- transition-Attribut in CSS
- animation-Attribut in CSS (ist aufwändiger)
- Javascript-Steuerung mit requestAnimationFrame (auch aufwändig)
Aber NICHT mit setTimeout, und nicht mit der Annahme, du hättest 50 Hertz Bildwiederholrate. Die hast Du auf Computern eigentlich nie. Ein Desktop hat eher 60, und moderne Geräte auch 100 oder 120. CSS Animationen und requestAnimationFrame berücksichtigen das.
Rolf
--
sumpsi - posui - obstruxi