К сожалению, каждый раз, когда вы переходите на новую страницу, независимо от того, насколько эффективно вы выполняете загрузку, это всегда будет заметно на более медленных устройствах / соединениях. В идеале, вашим решением будет либо использовать iframe (в крайнем случае), либо динамически загружать контент и заполнять его для каждой «страницы» в пределах одной реальной страницы с помощью манипуляций DOM. Вы также можете использовать CSS для маскировки элементов или «страниц», которые пользователь не должен видеть, пока он находится на текущей «странице», что позволит ему уже загружаться в браузер, и вы просто переключите его видимость.
Запросы браузера на новые страницы автоматически очищают документ, что приводит к "вспышкам" между страницами.
Самое простое решение - заполнить элементы с помощью JavaScript AJAX вызывает контент / настройки. Я приложил скрипку с примером того, как динамически изменять содержимое в vanilla JavaScript, все, что вам нужно сделать, это загрузить содержимое в массив и затем обновить элементы (включая навигацию по вашим вкладкам).
Соответствующий код для навигации будет здесь, но вы можете просто установить значение страницы на любую вкладку, которую они нажимают. Приведенный ниже код меняет видимость между двумя элементами при изменении страницы в зависимости от того, был ли достигнут предел:
btn_prev.style.display = (curr_page > 1 ? "inline-block" : "none");
btn_next.style.display = (curr_page < story.length ? "inline-block" : "none");
Если вы хотите еще больше оптимизировать его, вы можете поместить навигационные кнопки в массив и используйте индекс каждой кнопки, чтобы вам не нужны именованные элементы.
Fiddle: https://jsfiddle.net/s0toz3L8/1/