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

198
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

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

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

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

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

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

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

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

255