开发者问题收集

未捕获的 TypeError:无法读取 null 的属性“classList”

2014-11-17
15385

嗨,我正在尝试制作一个缩小的标题,我几乎让它工作了,但是我在 js 文件的这一部分不断收到上述错误

var cbpAnimatedHeader = (function() {

var docElem = document.documentElement,
    header = document.querySelector( '.cbp-af-header' ),
    didScroll = false,
    changeHeaderOn = 300;

function init() {
    window.addEventListener( 'scroll', function( event ) {
        if( !didScroll ) {
            didScroll = true;
            setTimeout( scrollPage, 250 );
        }
    }, false );
}

function scrollPage() {
        var sy = scrollY();
        if ( sy >= changeHeaderOn ) {
            var windowtab = $(window).width();
            if (windowtab >= 1021)
            {
            classie.add( header, 'cbp-af-header-shrink' );
            }
        }
        else {
            classie.remove( header, 'cbp-af-header-shrink' );
        }
        didScroll = false;
}

function scrollY() {
    return window.pageYOffset || docElem.scrollTop;
}

init();
})();

var classie = {
// full names
 hasClass: hasClass,
addClass: addClass,
removeClass: removeClass,
toggleClass: toggleClass,
 // short names
has: hasClass,
 add: addClass,
remove: removeClass,
toggle: toggleClass
};

当我为 jQuery 添加一个模块时,我在 DNN 中让它工作了,但是当我将它添加到皮肤时,我最终得到了上述控制台错误

2个回答

脚本中的此行:

header = document.querySelector('.cbp-af-header')

@ MDN for document.querySelector()

它表示, 返回文档中具有该类的第一个元素


因此,您可能正在寻找 .querySelectorAll("selector/s") :

document.querySelectorAll(".cbp-af-header");

@ MDN for document.querySelectorAll()

返回文档中提供的所有元素 (div 以case形式) 的列表

Jai
2014-11-17

我遇到了同样的问题。我意识到 IIFE 在 DOM 完全加载之前就执行了。如果你使用 jQuery,请尝试将其包装在 $(document).ready() 中

Elmuch
2014-12-31