window.onscroll = function() {runAnimationRun()};
Jeśli nie przekazujesz argumentów, po prostu:
window.onscroll = runAnimationRun();
! .on* już się nie używa. !
function runAnimationRun(){
var h = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
Prawdopodobnie nie musisz liczyć wysokości okna przy każdym scorllu - wystarczy policzyć ją raz.
function addShadows() {
document.getElementById('pointer1').classList.add('pointer-down1');
document.getElementById('pointerShadow1').classList.add('pointer-down1');
document.getElementById('pointer2').classList.add('pointer-down2');
document.getElementById('pointerShadow2').classList.add('pointer-down2');
document.getElementById('pointer3').classList.add('pointer-down3');
document.getElementById('pointerShadow3').classList.add('pointer-down3');
document.getElementById('pointer4').classList.add('pointer-down4');
document.getElementById('pointerShadow4').classList.add('pointer-down4');
document.getElementById('pointer5').classList.add('pointer-down5');
document.getElementById('pointerShadow5').classList.add('pointer-down5');
Nie da się tego w jakąś pętle wrzucić?
var timeout = timeout+4000;
zmienną timeout zdefiniowałeś już wyżej, teraz wystarczy tylko
timeout += 4000;
for (let i=0; i<arrWindows.length; i++) {
Czy wiesz, dlaczego w tej linijce jest let?
setInterval("showSpeechBubbles()", 20000);
Nie wywołuj niepotrzebnie eval - eval to zło. Jeśli nie przekazujesz argumentów, po prostu:
setInterval(showSpeechBubbles, 20000);
Można również zastanowić się nad zamianą getElementBy* na CSS selector API. Dopóki nie wiesz co robisz - praca na "żywym HTMLu" nie jest najlepszym pomysłem.
PS dobrze, że zaczynasz bez jQ ; )