Ошибка «undefined is not an object (evaluating 'i.getBoundingClientRect')»

199
26 июня 2017, 21:33

Есть вот такой код, который возвращает ошибку

undefined is not an object (evaluating 'i.getBoundingClientRect')

в консоль... Бьюсь целый день... Помогите...

function actSect () {
    var sect = document.querySelectorAll('.m-item'),
        i;
    for (i = 0; i <= sect.length; i++) {
        var elem = sect[i],
            top = sect[i].getBoundingClientRect().top,
            bot = sect[i].getBoundingClientRect().bottom,
            elemH = sect[i].offsetHeight,
            winH = document.documentElement.clientHeight;
        if (top < winH/2 && top > 0) {
            if (!elem.classList.contains('-active')) {
                elem.classList.add('-active');
            }
        } else if (bot > 0 && bot < winH/2 || top > winH) {
            if (elem.classList.contains('-active')) {
                elem.classList.remove('-active');
            }
        }
    }
}
window.addEventListener('scroll', actSect);
Answer 1

У вас неправильное условие в цикле — нестрогое сравнение i <= sect.length вместо правильного строгого i < sect.length.

Замените строчку

for (i = 0; i <= sect.length; i++) {

на

for (i = 0; i < sect.length; ++i) {
READ ALSO
Сохранение положения sidebar при помощи local Storage

Сохранение положения sidebar при помощи local Storage

Привет всем, нужна помощь по использованию локального хранилищаНужно чтобы браузер запоминал действие пользователя при сворачивании/разворачивании...

255
Изменение id объекта при клике

Изменение id объекта при клике

Ребят, помогите, пожалуйста, решить вопросЯ могу использовать только js

229
Является ли тождественным сравнение?

Является ли тождественным сравнение?

ПриветЯвляется ли сравнение 0 !== someElement

257