Javascript Jquery:使用同一全局变量的函数会弄乱我的代码

Javascript Jquery:使用同一全局变量的函数会弄乱我的代码,javascript,jquery,scroll,global-variables,Javascript,Jquery,Scroll,Global Variables,基于这一点: 我做了这样一个函数: tempScrollTop=0; $.fn.cool = function(options){ windowTop = $(window).scrollTop(); if (tempScrollTop < windowTop ){ //scroll down } else if (tempScrollTop > windowTop ){ //scroll up }

基于这一点:

我做了这样一个函数:

tempScrollTop=0;
$.fn.cool = function(options){
    windowTop = $(window).scrollTop(); 

    if (tempScrollTop < windowTop ){
        //scroll down
    }
    else if (tempScrollTop > windowTop ){
        //scroll up
    }

    tempScrollTop = windowTop;
};
$(“#element2”)接受全局变量tempScrollTop,该变量已被$(“#element1”)修改,对于元素2,tempScrollTop和windowTop具有相同的值,因此我的函数不起作用

我能做些什么?我不想为每个元素创建n个函数。

var tempScrollTop=0,
var tempScrollTop = 0,
    innerScrollTop;
    $.fn.cool = function(options){
        var $this = $(this);
        innerScrollTop = $this.data('scrollTop') || tempScrollTop;

        windowTop = $(window).scrollTop();

        if (innerScrollTop <= windowTop ){
            //scroll down
        } else {
            //scroll up
        }

        $this.data('scrollTop', windowTop);
    };
内部滚动顶部; $.fn.cool=功能(选项){ var$this=$(this); innerScrollTop=$this.data('scrollTop')| | tempScrollTop; windowTop=$(window.scrollTop();
如果(innerScrollTop看起来您真正想要做的是:

$("#element1","#element2").cool();
然后在你的酷功能中:

tempScrollTop=0;
$.fn.cool = function(options){
windowTop = $(window).scrollTop(); 

if (tempScrollTop < windowTop ){
    //scroll down
    this.each(function() {
        // do stuff with each selected element $(this)
    });
}
else if (tempScrollTop > windowTop ){
    //scroll down
    this.each(function() {
        // do stuff with each selected element $(this)
    });
}

tempScrollTop = windowTop;
};

为什么需要检查每个元素上窗口的滚动方向?为什么要设置全局变量?是否应该从函数调用返回
windowTop
的值并使用该返回值?@adeneo.我需要滚动方向来根据事件上下移动元素。@JoeGreen.我需要这个awnser实现的全局变量bc。你认为还有其他更好的方法吗?不,很抱歉,我的错误是代码不是复制粘贴,这是stackoverflow的一个例子,但感谢你指出,(我从原始问题中删除它)您需要将if中的tempScrollTop修改为this.tempScrollTop。除此之外,这是一个很好的答案。尽管如此,对于何时该页面不应仅包含代码,而是初学者的一种学习方式,没有任何解释。Michael的建议是通过这使得该解决方案适合于多个滚动,同时我们只将其写入一个匿名函数,该函数将在运行时决定哪个对象受到影响。此代码:this.tempScrollTop=this.tempScrollTop | | tempScrollTop;不知为什么this.tempScrollTop总是取0(猜测second选项)将保存滚动从this.tempScrollTop更改为$(element.data('scrollTop'));这并不能解决使用全局变量的问题。这与分别调用两个变量完全相同。@Capagris当然不是!在我的代码中,滚动只计算一次。如果一起计算一次,您是对的。不过,我仍然会寻求一种允许独立使用每个滚动元素的解决方案。@Capagris但关键是它们不是独立滚动的:-)@Christophe我尝试使用您的答案,但它说“无法读取未定义的属性'top'”,您如何在实现中使用$(this)和$(this)类似。children(function???
tempScrollTop=0;
$.fn.cool = function(options){
windowTop = $(window).scrollTop(); 

if (tempScrollTop < windowTop ){
    //scroll down
    this.each(function() {
        // do stuff with each selected element $(this)
    });
}
else if (tempScrollTop > windowTop ){
    //scroll down
    this.each(function() {
        // do stuff with each selected element $(this)
    });
}

tempScrollTop = windowTop;
};
$(window).scroll(function(e) {
    var scrollDiff=calculateScroll();
    $("#element1").cool(scrollDiff);
    $("#element2").cool(scrollDiff);
}