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