【问题标题】:javascript window.addEventListener, overwritten the config of first elementjavascript window.addEventListener,覆盖第一个元素的配置
【发布时间】:2015-03-14 10:55:20
【问题描述】:

我很抱歉,但我真的不知道如何修复此代码,甚至不知道如何搜索已修复的代码。

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

请随意填写以编辑我的帖子,我真的不知道该怎么做。

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));

【问题讨论】:

    标签: javascript overriding config addeventlistener


    【解决方案1】:

    您无需重新声明 init,它会连续调用两次,并且每次调用 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);
    
            }   
    
    }  
    

    【讨论】:

    • 非常感谢您的快速回答,我是这种编码的新手。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多