Это из-за этой части:
if (jump_count < 20){
//This willchange the background to be 'field.png'
document.getElementById('background').innerHTML = "html{background-color:black;animation:day_cycle 180s linear infinite;}.background{background:url('test.png') repeat-x;height:100%;width:3050px;animation:slide 3s linear infinite;}@keyframes slide{0%{transform:translate3d(0, 0, 0);}100%{transform:translate3d(-1600px, 0, 0);}}@keyframes day_cycle{0% {background-color:#0063fd;}15% {background-color:orange;}30% {background-color:red;}45% {background-color:#4B0082;}60% {background-color:red;}75% {background-color:orange;}100% {background-color:#0062fd;}}";
} else if (jump_count > 20 && jump_count < 40){
document.getElementById('background').innerHTML = "html{background-color:black;animation:day_cycle 180s linear infinite;}.background{background:url('field.png') repeat-x;height:100%;width:3050px;animation:slide 3s linear infinite;}@keyframes slide{0%{transform:translate3d(0, 0, 0);}100%{transform:translate3d(-1600px, 0, 0);}}@keyframes day_cycle{0% {background-color:#0063fd;}15% {background-color:orange;}30% {background-color:red;}45% {background-color:#4B0082;}60% {background-color:red;}75% {background-color:orange;}100% {background-color:#0062fd;}}";
} else {
//Nothing happens
}
Эта часть скрипта не заключена в функцию, поэтому она выполняется немедленно. Поскольку тег script находится внутри заголовка, он выполняется без ожидания готовности страницы. Таким образом, элемент background
еще не существует.
Вы можете поместить эту часть в обработчик для события ready
страницы, но самое простое - просто переместить весь тег script
в конец тела.
Демонстрация: