2010-11-18 130 views
1

我不理解JavaScript中的变量。我正在尝试在localScroll函数出现之前更改/计算“偏移量”(使用变量“theOffset”),或者更优选地调整窗口大小。下面的实例都没有工作,接受“//初始​​化偏移量”。JavaScript变量不起作用。为什么?

如何获取“$ .localScroll”中的变量“theOffset”进行更改?

jQuery(function($){ 

    //initialize offset 
    var windowWidth = $(window).width(); 
    if (windowWidth < 900) { 
     theOffset = 0; 
    } else { 
     theOffset = ($(window).width() - 900)/-2; 
    } 

$(window).resize(function() { 
    //calculate offset 
    var windowWidth = $(window).width(); 
    if (windowWidth < 900) { 
     theOffset = 0; 
    } else { 
     theOffset = ($(window).width() - 900)/-2; 
    } 
}); 


    $.localScroll({ 
     target: '#content', 
     queue:true, 
     duration:1500, 
     hash:true, 
     stop:true, 
     onBefore:function(e, anchor, $target){ 
      //calculate offset 
      var windowWidth = $(window).width(); 
      if (windowWidth < 900) { 
       theOffset = 0; 
      } else { 
       theOffset = ($(window).width() - 900)/-2; 
      } 
     }, 
     offset: {top:0, left: theOffset, 
     onAfter:function(anchor, settings){ 
      if (windowWidth < 900) { 
       theOffset = 0; 
      } else { 
       theOffset = ($(window).width() - 900)/-2; 
      } 
     } 
    }); 
}); 

如果需要知道,我中心一个div容器在一个奇特的侧滚动网站偏移的窗口;)

+0

你在http://www.jslint.com上得到3个错误 – 2010-11-18 21:27:55

+0

即使没有错误,同样的问题仍然存在......'{top:0,left:theOffset}'在执行时被评估,所以没有任何变量作用域的闭包将会修复这个行为并且使其不知道/ [ab ]使用scroll-to API /内部或重新调用localScroll函数。 – 2010-11-18 22:53:29

回答

1

你可以宣布,将通过引用传递到offset:您还可以细化几乎器四功能到一个单一命名功能的myOffset对象:

var myOffset = {top: 0, left: theOffset}; 
function calcOffset() { 
    var windowWidth = $(window).width(); 
    if (windowWidth < 900) { 
    myOffset.left = 0; 
    } else { 
    myOffset.left = (windowWidth - 900)/-2; 
    } 
} 
calcOffset(); 
// note leaving off the() will pass the function as a parameter instead of calling it 
$(window).resize(calcOffset); 

$.localScroll({ 
    target: '#content', 
    queue: true, 
    duration: 1500, 
    hash: true, 
    stop: true, 
    onBefore: calcOffset, 
    offset: myOffset, 
    onAfter: calcOffset 
}); 
0

声明theOffset jQuery函数

 

var theOffset = 0; 

jquery(function ($) { 
}) 
 
+0

你能解释为什么我能理解吗? – Dave 2010-11-18 21:30:43

+0

@通过这样做“theOffset”将获得全球范围,并且一次更改它应该在所有其他地方“可见”。 – 2010-11-18 22:42:36

+0

问题是'theOffset'通过的值。 – 2010-11-18 22:45:09

0

我之外认为你的问题在这里:

offset: {top:0, left: theOffset, 

首先,你错过了一个尾部}。其次,你正在做所谓的“按值传递” - 当你调用$ .localscroll()时发送的值实际上是在偏移中指定的值的副本。

您使用的是哪个版本的localScroll?我下载了我能找到的最新源代码,它的版本是1.2.7,而且我在任何地方都看不到偏移量。

没有看到localScroll源代码,我无法想到解决问题的方法。有时候,像这样的jQuery插件的作者提供了更新选项的方法。如果不是的话,你可能不得不修改localScroll源通过一个回调函数,而不是通过一个对象的属性来获取偏移值:

offset: {top:0, left: function() { return theOffset; } } 

注意上面不会没有修改localScroll源工作通过函数调用而不是选项属性获取此数据。

0

注意,在上面的例子,如果你调用setupSomeGlobals()再次创建一个新的闭包(堆栈帧!)。旧的gLogNumber,gIncreaseNumber,gSetNumber变量被具有新闭包的新函数覆盖。 (在JavaScript中,每当你在另一个函数中声明一个函数时,每次调用外部函数时都会重新创建函数内部函数)。

相关问题