В этом случае проблема заключается в положении тега <script>
внутри HTML-кода.Проблема была решена после того, как тег <script>
был перемещен в самый конец документа, прямо перед закрывающим тегом </body>
.
Почему это решает проблему?
Код JavaScript выполняется прямо в той самой позиции, где он вставляется через тег <script>
.Это означает, что ему придется работать с точными обстоятельствами и состояниями, которые известны в то время.В этом случае тег <script>
был вставлен до того, как <div id="navbar">
был вставлен в код.С точки зрения JS, этот элемент #navbar
не существует и, следовательно, document.getElementById("navbar")
не даст ожидаемого результата.
Когда вы перемещаете тег <script>
в конец кода HTML или, по крайней мере, после тега <div id="navbar">
, этот элемент #navbar
известен JavaScript во время выполнения, и код будетработа.
Вы можете идентифицировать эту проблему с помощью консоли JavaScript, встроенной в каждый современный браузер (рабочий стол).В этом случае сообщение об ошибке было
Невозможно прочитать свойство 'offsetTop' со значением NULL
null
, в данном случае это был результат запроса document.getElementById("navbar")
.Если вы уверены, что не ошиблись в аргументе (navbar
) [Я уверяю себя в этом, копируя и вставляя эти имена под сомнение], то это означает, что вы должны работать на позиции вашего <script>
теги.
Приложение
Если вы не можете изменить положение тега <script>
по какой-либо причине, вы можете попытаться отложить выполнение кода, заключив код в функцию и выполнитьэта функция после загрузки страницы.«Загрузка» может иметь различные значения:
- HTML полностью загружен, и DOM готов и готов к обработке.
- Загружается любой внешний контент, такой как изображения, таблицы стилей и сценарии.
В случае # 1 есть событие с именем DOMContentLoaded
, на которое можно реагировать, а в случае # 2 событие называется load
См. Здесь DOMContentLoaded и здесь для нагрузки .