Hier das Skript, das ich entwickelt habe:
<script>
const items = document.querySelectorAll("img[data-src]");
let playing = [false, false], oldPos = 0;
window.addEventListener('scroll', event => {
const pos = window.scrollY;
for (let i = 0; i < items.length; i++) {
const boundingRect = items[i].getBoundingClientRect();
playIt = false;
if (!playing[i]) {
let playIt = false;
// Scrollrichtung ermitteln
if (pos > oldPos) {
// Scrollrichtung down
// Prüfen, ob das Element in der Mitte angekommen ist
if (boundingRect.top < document.documentElement.clientHeight / 2
&& boundingRect.top > 0) {
console.log('down on', boundingRect.top)
playIt = true;
playing[i] = true;
items[i].src = items[i].dataset.src + Date.now();
}
} else {
// Scrollrichtung up
// Pruefen, ob das Element in der Mitte angekommen ist
if (boundingRect.top > document.documentElement.clientHeight / 2
&& boundingRect.bottom < document.documentElement.clientHeight) {
console.log('up on', boundingRect.top)
playIt = true;
playing[i] = true;
items[i].src = items[i].dataset.src + Date.now();
}
}
} else {
if (pos > oldPos) {
// Scrollrichtung down
// Pruefen, ob das Element den Viewport nach oben verlassen hat
if (boundingRect.top < 0) {
console.log('down off', boundingRect.top)
playing[i] = false;
}
} else {
// Pruefen, ob das Element den Viewport nach unten verlassen hat
if (boundingRect.bottom > document.documentElement.clientHeight) {
console.log('up off', boundingRect.top)
playing[i] = false;
}
}
}
}
oldPos = pos;
});
</script>
Alles anzeigen
Füge es am Ende des Body, vor dem schließenden </body>, ein.
Die img-Tags für die GIFs müssen damit so aussehen:
<img id="img1" data-src="images/laola.gif?time=">
Das Skript ist erst Mal eine Basisversion. Es spielt das GIF, wenn es etwa in der Mitte des Browserfenster ist.