javascript window.addEventListener, 覆盖第一个元素的配置

javascript window.addEventListener, overwritten the config of first element

抱歉,我真的不知道如何修复这段代码,甚至不知道如何搜索修复。

问题是当我用自己的配置值重新声明函数时,它会覆盖第一次声明的配置。请提供任何帮助,这对我有很大帮助,请提前致谢。

请随意编辑我的post,实在是我不知道怎么办。

var FX = (function(FX, $) {
    window.addEventListener('scroll', function(){
        FX.scrollTop.init({
            obj: $(".header--fixed"),
            from: 150
        }); 
        FX.scrollTop.init({
            obj: $(".sticky-left-nav"),
            from: 1600
        });     
    }); 
    /*----------------
    Scroll
    ----------------- */
    FX.scrollTop = {    
        config: {
            obj: '',
            from: 150,
            activeClass: 'scrolled'
        },  

        init: function(config) {
            $.extend(this.config, config);              

            var scrolledFromtop = $(window).scrollTop();
            //console.log(this.config.obj+'=>'+this.config.from);

            if(scrolledFromtop > this.config.from){
                config.obj.addClass('fixed');

                setTimeout(function(){
                    var config = FX.scrollTop.config;
                   config.obj.addClass(config.activeClass);
                }, 90);


            }else{
                var config = FX.scrollTop.config;
                config.obj.removeClass(config.activeClass);

                setTimeout(function(){
                    var config = FX.scrollTop.config;
                    config.obj.removeClass('fixed');
                }, 90);

            }   

        }       

    }
    return FX;
}(FX || {}, jQuery));

您没有重新声明 init 它被连续调用了两次,并且每次调用 init 时您的原始配置对象都会被覆盖。

您可以将初始化所需的所有变量分配给局部变量,并检查它们何时没有传递回您最初定义的配置:

init: function(config) {

        var originalConfig = FX.scrollTop.config;

        var obj = config.obj ? config.obj : originalConfig.obj;
        var from = config.from ? config.from : originalConfig.from;
        var activeClass = config.activeClass ? config.activeClass : originalConfig.activeClass;

        var scrolledFromtop = $(window).scrollTop();
        //console.log(this.config.obj+'=>'+this.config.from);

        if(scrolledFromtop > from){
            obj.addClass('fixed');

            setTimeout(function(){
               obj.addClass(activeClass);
            }, 90);


        }else{
            obj.removeClass(activeClass);

            setTimeout(function(){
                obj.removeClass('fixed');
            }, 90);

        }   

}